有效输入二维码生成失败
QR code generation failure for valid input
我正在尝试使用 qrcode
包生成自定义 QR 码,但我 运行 遇到了一个问题,它似乎在有效输入时失败。我想知道这是程序包中的错误还是我不熟悉的二维码的预期行为。
根据 this site,具有中等纠错功能的版本 1 QR 码最多可包含 20 个字母数字值。 myStr
下面是一个简单的字母数字字符串,长度为 19 个字符,它失败并输出
qrcode.exceptions.DataOverflowError: Code length overflow. Data size (131) > size available (128)
但是,如果我将 myStr
从 0000000000A0000A000
更改为 000000000000000A000
,该字符串仍然是字母数字且长度相同,但随后它通过了。
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_M,
)
myStr = '0000000000A0000A000'
print(len(myStr))
qr.add_data(myStr)
qr.make(fit=False)
img = qr.make_image()
Windows,Python2.7,二维码5.3版本,Pillow
错误
qrcode.exceptions.DataOverflowError: Code length overflow. Data size (131) > size available (128)
指向的是二维码创建的buff,不是你的。
在 qrcode/util.py:
print 'len(buffer):', len(buffer)
print 'buffer:', buffer
if len(buffer) > bit_limit:
raise exceptions.DataOverflowError(
"Code length overflow. Data size (%s) > size available (%s)" %
(len(buffer), bit_limit))
关于0000000000A0000A000的输出:
bit_limit: 128
len(buffer): 131
buffer: 16.40.0.0.0.0.64.20.17.1.0.0.32.33.194.0.0
关于 000000000000000A000 的输出:
bit_limit: 128
len(buffer): 99
buffer: 16.60.0.0.0.0.0.0.32.33.194.0.0
您可以使用更大的上层版本bit_limit。
qr = qrcode.QRCode(
version=2, # use upper level version
error_correction=qrcode.constants.ERROR_CORRECT_M,
)
> bit_limit: 224
这看起来确实像是 qrcode
中的错误。我能够在不同的 OS、python 版本和 qr 版本上重复这个问题。这似乎特别影响字母数字数据。我已将此问题报告为二维码 github 页面。
对于遇到此问题的其他人,我发现如果将 add_data
中的 optimize
参数设置为 0
,则它会通过。即
qr.add_data(myStr, optimize=0)
我已经通过生成数千个特定长度的随机字母数字字符串并为所有字符串生成 QR 码来测试上述内容。我已经测试了不同的 QR 版本和纠错级别,我没有遇到任何失败。
我正在尝试使用 qrcode
包生成自定义 QR 码,但我 运行 遇到了一个问题,它似乎在有效输入时失败。我想知道这是程序包中的错误还是我不熟悉的二维码的预期行为。
根据 this site,具有中等纠错功能的版本 1 QR 码最多可包含 20 个字母数字值。 myStr
下面是一个简单的字母数字字符串,长度为 19 个字符,它失败并输出
qrcode.exceptions.DataOverflowError: Code length overflow. Data size (131) > size available (128)
但是,如果我将 myStr
从 0000000000A0000A000
更改为 000000000000000A000
,该字符串仍然是字母数字且长度相同,但随后它通过了。
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_M,
)
myStr = '0000000000A0000A000'
print(len(myStr))
qr.add_data(myStr)
qr.make(fit=False)
img = qr.make_image()
Windows,Python2.7,二维码5.3版本,Pillow
错误
qrcode.exceptions.DataOverflowError: Code length overflow. Data size (131) > size available (128)
指向的是二维码创建的buff,不是你的。 在 qrcode/util.py:
print 'len(buffer):', len(buffer)
print 'buffer:', buffer
if len(buffer) > bit_limit:
raise exceptions.DataOverflowError(
"Code length overflow. Data size (%s) > size available (%s)" %
(len(buffer), bit_limit))
关于0000000000A0000A000的输出:
bit_limit: 128
len(buffer): 131
buffer: 16.40.0.0.0.0.64.20.17.1.0.0.32.33.194.0.0
关于 000000000000000A000 的输出:
bit_limit: 128
len(buffer): 99
buffer: 16.60.0.0.0.0.0.0.32.33.194.0.0
您可以使用更大的上层版本bit_limit。
qr = qrcode.QRCode(
version=2, # use upper level version
error_correction=qrcode.constants.ERROR_CORRECT_M,
)
> bit_limit: 224
这看起来确实像是 qrcode
中的错误。我能够在不同的 OS、python 版本和 qr 版本上重复这个问题。这似乎特别影响字母数字数据。我已将此问题报告为二维码 github 页面。
对于遇到此问题的其他人,我发现如果将 add_data
中的 optimize
参数设置为 0
,则它会通过。即
qr.add_data(myStr, optimize=0)
我已经通过生成数千个特定长度的随机字母数字字符串并为所有字符串生成 QR 码来测试上述内容。我已经测试了不同的 QR 版本和纠错级别,我没有遇到任何失败。