python3中如何对二维码QRcode进行编码解码

通常对于二维码,我们需要进行两种操作:

  • 将二维码图片扫描后解析成字符串
  • 将字符串编码生成二维码图片

这是两个逆过程,在python2中,我们可以通过zbar这个第三方库实现两个功能。可以zbar并不支持python3,而且,zbar在window平台上的安装极其繁琐,有很多坑。

所以想通过python3处理二维码的过程中,查了很多资料。目前比较好的解决办法如下:

pyzbar代替zbar解析二维码

安装:

pip install pyzbar

这是可能的,因为pyzbar是一个围绕zbar库的基于ctypes的包装器,它包含在dll和Windows Python的轮子中。

使用

网络上二维码图片解析
import requests
import array
from PIL import Image
from io import BytesIO
from pyzbar.pyzbar import decode


# decode_result的格式是[Decoded(data='****',……)],列表里包含一个nametuple
def decode_qrcode(url)
    decode_result = decode(Image.open(BytesIO(requests.get(urls, headers=HEADERS).content))
    return str(decode_result[0].data, encoding='utf-8')
本地二维码图片解析
from PIL import Image
from pyzbar.pyzbar import decode


def decode_qrcode(url)
    decode_result = decode(Image.open('filename'))
    return str(decode_result[0].data, encoding='utf-8')

更详细用法参见release页面

下载zbar.exe文件并安装,通过系统命令行调用来解码

下载地址:zbar-0.10-setup.exe

说明:

zbar说明

使用:

import os

os.system(r'C:\zbarimg.exe -d d:\Winapps\Zbar\Examples\barcode.png')

Linux平台上qrtools解码

注:这个方法我没用过。

安装:

sudo apt-get install python-qrtools

使用:

import qrtools
qr = qrtools.QR()
qr.decode("horn.png")
print qr.data

用PyQRCode来生成二维码

安装:

pip install pyqrcode

用法:

import pyqrcode
url = pyqrcode.create('http://uca.edu')
url.svg('uca-url.svg', scale=8)

说明: pyqrcode具有完善的帮助文档和强大的功能,可以快速生产二维码图片,细节参考:

其他值得关注的内容

qreader是一个正在开发中的项目,使用纯Python编写的二维码解析库,不依赖zbar。感兴趣的可以去提交PR。

免费的二维码编码解码API接口

http://api.qrserver.com/

Send a GET request of following form to our system to decode a QR code graphic (=to read a QR code from the web): http(s)://api.qrserver.com/v1/read-qr-code/?fileurl=[URL-encoded-webaddress-url-to-qrcode-image-file]

http://www.7xiwang.com/Tools/Index

解码api:http://www.7xiwang.com/WebService/QRCodeDecode

api参数:base64img

api请求类型:HttpPost

参数数据格式(JSON):{"base64img":""}

api返回数据格式(JSON):

请求成功:{"status":"1","text":""}
请求失败:{"status":"0","Msg":"错误信息"}