Qr-Code encode and decode with python+qrcode+zbar

本文介绍了如何使用Python的qrcode和zbar库来生成和解析二维码。qrcode库提供简单的二维码生成,而zbar则用于从图像中读取二维码。针对zbar的中文乱码问题,文章提供了编码处理的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QR-Code是用的最多的一种二维码,python环境下生成和解析分别有相应工具包。最近对二维码的生成和解析进行了一些学习,此处仅对qrcode和zbar两个工具包的使用进行介绍。

qrcode

用于生成二维码的工具包。详情参考qrcode 5.3 : Python Package Index,使用起来更简单,如下是示例代码:

安装

pip install qrcode

示例代码

一般用法

import qrcode 
img = qrcode.make('hello world')
img.save('test.png')

高级用法

import 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 zbar

def 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的文章

  1. 秒杀主流应用的二维码扫描
  2. zxing源码分析——QR码部分
  3. zxing源码分析——DataMatrix码部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值