QR-Code是用的最多的一種二維碼烘跺,python環(huán)境下生成和解析分別有相應(yīng)工具包。最近對二維碼的生成和解析進行了一些學(xué)習(xí)脂崔,此處僅對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
中文亂碼解決
由于編碼問題(參考:字符串和編碼 - 廖雪峰)煤蹭,默認(rèn)unicode編碼,所以如果不進行處理取视,通常會有中文亂碼產(chǎn)生硝皂,以下為處理方式,經(jīng)測試ok
try:
data += symbol.data.decode('utf-8').encode('sjis').decode('utf-8')
except:
data += symbol.data
以上簡單操作即完成QR-Code的生成和解析工作作谭,不過解析的正確率有待驗證稽物,特別是扭曲變形或者背景稍混亂的圖片,有可能部分識別錯誤或者無法識別折欠。
Zxing+Zbar
另外幾篇關(guān)于Zxing源碼的分析贝或,以及Android下整合Zxing和zbar的文章