0

我对python-qrcode有一个非常奇怪的问题。

我已经让它在我们的开发环境中工作了一段时间,没有任何问题。我们使用它来创建两个二维码,它们都包含几乎完全相同长度的 URL(一个包含一个额外的字母和两个额外的斜杠)。这两个代码的大小必须完全相同,这一点至关重要。

自从我们大约五个月前设置 python-qrcode 以来,我们生成的每个 qrcode 的大小都完全相同,没有失败。但是,我们现在已经将所有内容推送到生产服务器,突然我们遇到了问题。

基本上,我们生成的代码之一比正常代码大(这是带有三个额外字符的代码)。另一个代码是正确的大小。这两个代码是使用完全相同的函数生成的,我们只是传递不同的 URL 进行编码。

在我的本地机器和我们的开发服务器上,所有 qrcode 的大小完全相同(包括带有额外字符的那个),但在生产服务器上,较长的一个更大,而另一个是正确的。

我们使用 Git 版本控制,因此服务器之间的所有文件/功能等都是相同的。设置之间的唯一区别是 Ubuntu 的版本(生产服务器上的 12.04 与 12.10),但我不明白为什么会导致这个问题。

如果两个代码都更大,我可以理解,但我无法弄清楚为什么只有一台服务器上的一个会比另一个大......?

如果有人可以就从哪里开始解决这个问题提出任何建议,我将不胜感激!

编辑:

以下是相关代码:

myQrGenerator = qrcode.QRCode(
    version=QRCODE_SIZE,
    error_correction=qrcode.constants.ERROR_CORRECT_M,
    box_size=QRCODE_BOX_SIZE,
    border=QRCODE_BORDER_SIZE
)

myQrGenerator.add_data('%s%s/' % (theBaseUrl, str(theHash)))
myQrGenerator.make(fit=True)

我们从 local_settings.py 中获取这些变量

4

2 回答 2

1

经过长时间的讨论,确定两台服务器使用不同的 URL。喷出较大 QR 码(就 QR 像素而言,随后以图像像素而言)的那个溢出,它可以存储的预定义大小的比特限制是不够的,并qrcode通过增加数量使其适合它可以存储的数据。

为了解决这个问题,fit设置False为提供溢出约束,并version从一开始就增加以容纳更多位。box_size可以减少一点以或多或少地保持原始图像大小。

于 2012-12-03T09:48:34.500 回答
0

可能在盒子上安装PIL的方式有所不同。查看python-qrcode 源代码,它确实:

try:
    from PIL import Image, ImageDraw
except ImportError:
    import Image, ImageDraw

看看当你这样做时会发生什么:

from PIL import Image, ImageDraw

在每台机器上。无论哪种方式,如果它真的不是应用程序代码中的错误(确保每个盒子上都有相同的代码),听起来这将是因为 PIL 在 Ubuntu 12.10 和 12.04 上构建自身的方式存在一些差异,可能是由于它用于编译的一些不同的头文件/库。查看确保 PIL 安装与其他框一致。

于 2012-12-03T08:34:45.743 回答