others - 在( 纯) python 中,如何解码QR码图像?

我需要一种方法,使用(纯)python从图像文件中解码QR-code 。

我有一个jpg文件,有一个QR-code,我想用python解码,

PyQRCode (网站 )可以通过简单地提供路径来解码图像中的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但是,我发现上面的示例代码很奇怪,因为我认为qrcode只能引用此库,它只能混淆,所以我尝试使用pyqrcodeqrcode上面的代码,但是在第二行中都失败了,AttributeError: 'module' object has no attribute 'Decoder'所以我转移到下一个库:

ZBar (网站 )声明为 "an open source software suite for reading bar codes from various sources, such as image files."所以我尝试在Mac OSX上安装它 sudo pip install zbar这个操作失败 error: command 'cc' failed with exit status 1所以我决定再继续

QRTools,根据这个blog可以使用以下代码轻松解码图像:


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-qrtoolsqr-toolspython-qrtools和一些组合,但不幸的是没有用,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 'xefxbbxbfNULL' where I expect an int (being `1234567890`)

虽然这似乎解码了它,但是它似乎没有正确地完成,它还需要ZBar,因此不是纯python ,所以我决定找另一个库。

PyXing (网站 )应该是流行的Java ZXing库的python port,但是项目没有自述文档。

时间:

你可以使用qrtools尝试以下步骤和代码:

  • 创建qrcode文件,如果还没有存在的话,

    • 我使用pyqrcode做这个,可以使用pip install pyqrcode安装它
    • 然后使用下面的代码:

      
      >>> import pyqrcode
      >>> qr = pyqrcode.create("HORN O.K. PLEASE.")
      >>> qr.png("horn.png", scale=6)
      
      
  • 使用现有的qrcode文件解码qrtools

    • 使用qrtools安装 sudo apt-get install python-qrtools
    • 现在在python提示符中使用以下代码

      
      >>> import qrtools
      >>> qr = qrtools.QR()
      >>> qr.decode("horn.png")
      >>> print qr.data
      u'HORN O.K. PLEASE.'
      
      

下面是完整代码:


In [2]: import pyqrcode
In [3]: qr = pyqrcode.create("HORN O.K. 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 O.K. PLEASE.

警告

  • 你可能需要使用pip install pypng安装PyPNG来使用pyqrcode
  • 如果你安装了PIL,得到IOError: decoder zip not available在这种情况下,尝试卸载和重新安装PIL使用:

    
    pip uninstall PIL
    pip install PIL
    
    
  • 如果无法正常工作,请尝试使用Pillow

    
    pip uninstall PIL
    pip install pillow
    
    

...