Python学习笔记--使用Zbar解码二维码

  前几天朋友让我用Python写的解码二维码的程序,我在网上东找西找,找到了所关注的bigxupython 使用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上使用,直接安装成功。

Python学习笔记--使用Zbar解码二维码_第1张图片

     

他说到简单图片扫描程序-----他这个程序是在Linux命令行环境下运行的,或者在python的自带的命令行窗口来运行命令(不是Python的IDLE),是Python(command line),在所敲的命令行中具体指定要解码的二维码图片名称。


如果不想在命令行里操作,就要修改程序代码,首先把测试用的barcode.png放到D:zbar目录下(当然也可以自己指定目录和图片),把原文第05行

  1. if len(argv) < 2: exit(1)修改成img_file="barcode.png",把原文第11行 pil = Image.open(argv[1]).convert('L')修改成pil=Image.open(img_file).conver('L')-------------当然这是把要检测的图片写死在程序里,以后如果你想对别的图片进行解析,可在修改程序第五行的图片名。


#!/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


对于视频检测的代码可以直接运用在XP上,不用做修改。


#!/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

zbar 首先创建一个Processor,然后配置该处理器,然后初始化该处理器。定义一个反馈函数my_handler,然后该处理器调用该函数。之后设置该处理器的预览窗口可见,最后激活该处理器
 

你可能感兴趣的:(python,二维码,解码,zbar)