如何解码(最好是纯粹的)Python中的QR码图像?
TL; DR :我需要一种方法来使用Python(更好的纯Python)来解码来自图像文件的QR码。
我有一个QR码,我想用Python解码的jpg文件。 我find了一些声称这样做的库:
PyQRCode ( 网站在这里 )据说可以通过简单地提供一个像这样的path解码图像的qr码:
import sys, qrcode d = qrcode.Decoder() if d.decode('out.png'): print 'result: ' + d.result else: print 'error: ' + d.error
所以我只是使用sudo pip install pyqrcode
来安装它。 但是,我发现上面的示例代码奇怪的是,它只是importqrcode
(而不是pyqrcode
虽然)因为我认为qrcode
引用这个库只能生成 qr代码的图像有点困惑我。 所以我用pyqrcode
和qrcode
尝试了上面的代码,但都在第二行说AttributeError: 'module' object has no attribute 'Decoder'
失败AttributeError: 'module' object has no attribute 'Decoder'
。 此外, 网站是指Ubuntu 8.10(6年前出来的),我找不到一个公共的(git或其他)存储库来检查最新的提交。 于是我转到下一个图书馆:
ZBar ( 这里的网站 )声称是"an open source software suite for reading bar codes from various sources, such as image files."
所以我试着在运行sudo pip install zbar
Mac OSX上sudo pip install zbar
。 这将失败, error: command 'cc' failed with exit status 1
。 我试图在这个SO问题的答案build议,但我似乎无法解决这个问题。 所以我决定继续前进:
QRTools根据这个blogpost可以解码图像很容易通过使用下面的代码:
from qrtools import QR myCode = QR(filename=u"/home/psutton/Documents/Python/qrcodes/qrcode.png") if myCode.decode(): print myCode.data print myCode.data_type print myCode.data_to_string()
所以我尝试使用sudo pip install qrtools
来安装它,它找不到任何东西。 我也试过用python-qrtools
, qr-tools
, python-qrtools
和更多的组合,但不幸的是无济于事。 我想这是指这个回购说,它是基于ZBar(见上文)。 虽然我想在Heroku上运行我的代码(因此更喜欢纯粹的Python解决scheme),但是我成功地将它安装在Linux机器上(使用sudo apt-get install python-qrtools
)并尝试运行它:
from qrtools import QR c = QR(filename='/home/kramer65/qrcode.jpg') c.data # prints u'NULL' c.data_type # prints u'text' c.data_to_string() # prints '\xef\xbb\xbfNULL' where I expect an int (being `1234567890`)
虽然这似乎解码它,似乎并没有做到这一点。 它还需要ZBar,因此不是纯粹的Python。 所以我决定再找一个图书馆。
PyXing ( 这里的网站 )被认为是stream行的Java ZXing库的一个Python端口,但是初始的和唯一的提交已经有6年的历史了,而且这个项目没有任何自述或文档。
其余的我find了几个qr en coders(而不是de coders)和一些可以为你解码的API端点。 由于我不喜欢这个服务依赖于其他的API端点,我想保持解码本地。
所以得出结论; 任何人都知道我怎么能解码图像(更好的纯Python)中的QR码? 所有的提示,欢迎!
您可以使用qrtools
来尝试以下步骤和代码:
-
创build一个
qrcode
文件,如果不存在的话- 我用
pyqrcode
做这个,可以用pip install pyqrcode
来pip install pyqrcode
-
然后使用代码:
>>> import pyqrcode >>> qr = pyqrcode.create("HORN OK PLEASE.") >>> qr.png("horn.png", scale=6)
- 我用
-
使用
qrtools
解码现有的qrcode
文件- 使用
sudo apt-get install python-qrtools
-
现在在你的python提示符下使用下面的代码
>>> import qrtools >>> qr = qrtools.QR() >>> qr.decode("horn.png") >>> print qr.data u'HORN OK PLEASE.'
- 使用
以下是一次完整的代码:
In [2]: import pyqrcode In [3]: qr = pyqrcode.create("HORN OK PLEASE.") In [4]: qr.png("horn.png", scale=6) In [5]: import qrtools In [6]: qr = qrtools.QR() In [7]: qr.decode("horn.png") Out[7]: True In [8]: print qr.data HORN OK PLEASE.
注意事项
- 您可能需要使用
pip install pypng
来pip install pypng
来使用pyqrcode
-
如果你安装了
PIL
,你可能会得到IOError: decoder zip not available
。 在这种情况下, 尝试卸载并重新安装PIL
使用:pip uninstall PIL pip install PIL
-
如果这不起作用,请尝试使用
Pillow
pip uninstall PIL pip install pillow