前几天朋友让我用Python写的解码二维码的程序,我在网上东找西找,找到了所关注的bigxu的python 使用zbar解码二维码。感觉他的比较靠谱,然后就使用了下。但是他的介绍博客有点不详细,我在此补充下,留作自己的查阅笔记,同时以免以后大家安装测试遇到麻烦,以下红色是我的字。
首先他的文字介绍:使用python做二位码的解析。非常的方便,需要安装zbar,我使用的是python2.6,Windows Xp,下载的是zbar-0.10.win32-py2.6.exe可以到http://pypi.python.org/pypi/zbar/上面下载,这个安装包比较方便,源码安装比较麻烦,还需要安装Mingw,我在虚拟机下面是python2.7试一下安装没有成功。还需要安装zbar-0.10-setup.exe。安装完如下所示可以直接使用。将zar安装目录下面 的dll文件复制到Python26\Lib\site-packages下,就可以使用python的zbar模块了。注解:zbar-0.10.win32-py2.6.exe 只能在32位系统下使用,你在查攻略如何在64位系统做文件的修改都很不如意,还不如直接在32的XP上使用,直接安装成功。
他说到简单图片扫描程序-----他这个程序是在Linux命令行环境下运行的,或者在python的自带的命令行窗口来运行命令(不是Python的IDLE),是Python(command line),在所敲的命令行中具体指定要解码的二维码图片名称。
如果不想在命令行里操作,就要修改程序代码,首先把测试用的barcode.png放到D:zbar目录下(当然也可以自己指定目录和图片),把原文第05行
#!/usr/bin/python from sys import argv import zbar import Image img_file="barcode.png" # create a reader scanner = zbar.ImageScanner() # configure the reader scanner.parse_config('enable') # obtain image data pil=Image.open(img_file).conver('L') width, height = pil.size raw = pil.tostring() # wrap image data image = zbar.Image(width, height, 'Y800', raw) # scan the image for barcodes scanner.scan(image) # extract results for symbol in image: # do something useful with results print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data # clean up del(image)
pil把image转换得到大小等数值,并转换成字符串格式。
zbar把pil转换成zbar自身定义的数据格式,然后赋值给image
#!/usr/bin/python from sys import argv import zebra # create a Processor proc = zbar.Processor() # configure the Processor proc.parse_config('enable') # initialize the Processor device = '/dev/video0' if len(argv) > 1: device = argv[1] proc.init(device) # setup a callback def my_handler(proc, image, closure): # extract results for symbol in image: if not symbol.count: # do something useful with results print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data proc.set_data_handler(my_handler) # enable the preview window proc.visible = True # initiate scanning proc.active = True try: proc.user_wait() except zbar.WindowClosed: pass