QR-Code是用的最多的一种二维码,python环境下生成和解析分别有相应工具包。最近对二维码的生成和解析进行了一些学习,此处仅对qrcode和zbar两个工具包的使用进行介绍。
qrcode##
用于生成二维码的工具包。详情参考qrcode 5.3 : Python Package Index,使用起来更简单,如下是示例代码:
安装
pip install qrcode
示例代码
一般用法
pythonimport qrcode img = qrcode.make('hello world')img.save('test.png')
高级用法
pythonimport qrcode
qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, )
qr.add_data('this is a new qrcode')
qr.make(fit=True)
img = qr.make_image()img.save('test.png')
**zbar **##
用于解析图像和视频中二维码的工具包。详情参考ZBar bar code reader。
安装
由于官方的包最高完美支持到python2.6,而主流python版本用的是2.7,windows下这里有一个2.7的msi,来源不详
示例代码
from PIL import Image
import zbardef
get_QR (imgPath): scanner = zbar.ImageScanner()
scanner.parse_config("enable")
pil = Image.open(imgPath).convert('L')
width, height = pil.size
raw = pil.tobytes()
image = zbar.Image(width, height, 'Y800', raw)
scanner.scan(image) data = ''
for symbol in image:
try:
data += symbol.data.decode('utf-8').encode('sjis').decode('utf-8')
except:
data += symbol.data del(image)
if not data:
data += 'Nan'
return data
img = 'images/barcode_01.jpg'
qrdata= get_QR(img)
print '[DATA]', qrdata
中文乱码解决
由于编码问题(参考:字符串和编码 - 廖雪峰),默认unicode编码,所以如果不进行处理,通常会有中文乱码产生,以下为处理方式,经测试ok
try:
data += symbol.data.decode('utf-8').encode('sjis').decode('utf-8')
except:
data += symbol.data
以上简单操作即完成QR-Code的生成和解析工作,不过解析的正确率有待验证,特别是扭曲变形或者背景稍混乱的图片,有可能部分识别错误或者无法识别。
Zxing+Zbar
另外几篇关于Zxing源码的分析,以及Android下整合Zxing和zbar的文章