文章目录 1. 案例介绍 2. 准备工作 3. 细节设计 3.1 生成二维码 3.2 解析二维码 4. 代码汇总 5. 运行结果 后记 1. 案
文章目录
- 1. 案例介绍
- 2. 准备工作
- 3. 细节设计
- 3.1 生成二维码
- 3.2 解析二维码
- 4. 代码汇总
- 5. 运行结果
- 后记
1. 案例介绍
我们使用 Python 提供的 qrcode 库和 pyzbar 库实现二维码的制作和解码。
2. 准备工作
- qrcode 库。
- pillow 库。
- pyzbar 库。
3. 细节设计
3.1 生成二维码
核心代码:
qr = qrcode.QRCode()qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color='black', back_color='white')
我们使用 qrcode 提供的 add_data、make、make_imge 方法,实现加载数据、生成二维码对象、将二维码对象保存至图片功能。
3.2 解析二维码
核心代码:
decode_data = pyzbar.decode(Image.open(filePath), symbols=[pyzbar.ZBarSymbol.QRCODE])[0].data.decode('utf-8')我们使用 pyzbar 提供的 decode 方法,读入二维码图片,进行解码。
>>> pyzbar.decode(Image.open(filePath), symbols=[pyzbar.ZBarSymbol.QRCODE])[Decoded(data=b'abcdefghijkl123', type='QRCODE', rect=Rect(left=4, top=4, width=84, height=84), polygon=[Point(x=4, y=4), Point(x=4, y=88), Point(x=88, y=88), Point(x=88, y=4)])]
4. 代码汇总
# coding: utf-8# !/usr/bin/python
"""
@File : QRcode.py
@Author : jiaming
@Modify Time: 2020/1/13 19:55
@Contact :
@Version : 1.0
@Desciption : 生成传统二维码
解析传统二维码
"""
import qrcode
from PIL import Image
from pyzbar import pyzbar
filePath = "C:\\Users\\jiaming\\Desktop\\qrcode.png"
def create_QRcode(data=''):
"""
:return: 生成的二维码路径
"""
print('生成传统二维码...')
# 向二维码中填充数据
"""
version:值为1~40的整数,控制二维码的大小(最小值是1,是个12×12的矩阵)。 如果想让程序自动确定,将值设置为 None 并使用 fit 参数即可。
error_correction:控制二维码的错误纠正功能。可取值下列4个常量。
ERROR_CORRECT_L:大约7%或更少的错误能被纠正。
ERROR_CORRECT_M(默认):大约15%或更少的错误能被纠正。
ROR_CORRECT_H:大约30%或更少的错误能被纠正。
ERROR_CORRECT_Q:至多能够矫正25%的错误。
box_size:控制二维码中每个小格子包含的像素数。
border:控制边框(二维码与图片边界的距离)包含的格子数(默认为4,是相关标准规定的最小值)。
"""
qr = qrcode.QRCode(
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=4,
border=1,
) # 设置图片格式
qr.add_data(data)
qr.make(fit=True)
# 生成二维码
img = qr.make_image(fill_color='black', back_color='white')
img.save(filePath, dpi=(254.0, 254.0))
print('保存路径:', filePath)
return filePath
def decode_QRcode(filePath=''):
"""
:param filePath: 待识别二维码路径
:return: 打印出识别的结果
"""
decode_data = pyzbar.decode(Image.open(filePath), symbols=[
pyzbar.ZBarSymbol.QRCODE])[0].data.decode('utf-8')
print("解码数据:", decode_data)
return decode_data
if __name__ == "__main__":
create_QRcode('abcdefghijkl123') # 传入参数为需要编码的数据
decode_QRcode(filePath) # 传入参数为待识别的二维码
5. 运行结果
后记
以上就是我们今天的内容,我们可以尝试用一个交互界面来完善我们这个案例,小黑框看起来还是很难看。