快速生成二维码——Python QRCode库详解
powerlit 2024-07-30 11:35:05 阅读 83
🍀 前言
博客地址:
CSDN:https://blog.csdn.net/powerbiubiu
👋 简介
QRCode码是由日本于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。QRCode模块是Github上的一个开源项目,提供了生成二维码的接口,QRCode默认使用PIL库用于生成图像。
📖 正文
1 QRCode安装
<code>pip install qrcode -i https://pypi.tuna.tsinghua.edu.cn/simple
2 参数介绍
QRCode的参数
version | 整数,范围为1到40,表示二维码的大小(最小值是1,是个12×12的矩阵),如果想让程序自动生成,将值设置为 None 并使用 fit=True 参数即可。 |
---|---|
error_correction | 二维码的纠错范围 |
ERROR_CORRECT_L 7%以下的错误会被纠正 | |
ERROR_CORRECT_M 15%以下的错误会被纠正 | |
ERROR_CORRECT_Q 25 %以下的错误会被纠正 | |
ERROR_CORRECT_H 30%以下的错误会被纠正 | |
box_size | 每个点(方块)中的像素个数 |
border | 二维码距图像外围边框距离,默认为4,而且相关规定最小为4 |
3 二维码生成
步骤:
创建QRCode对象add_data()添加要生成二维码的数据make_image()创建二维码打开或者保存二维码图片
import qrcode
data = 'https://www.baidu.com/'
img_file = r'code.png'
# 实例化QRCode生成qr对象
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4
)
# 传入数据
qr.add_data(data)
qr.make(fit=True)
# 生成二维码
img = qr.make_image()
# 保存二维码
img.save(img_file)
# 展示二维码
img.show()
4 工具封装
4.1 生成普通二维码
import qrcode
def get_qr_code_image(source: str, data: str) -> None:
"""
生成二维码
:param source: 保存路径
:param data: 数据
:return:
"""
if not os.path.exists(source):
os.makedirs(source)
qr = qrcode.QRCode(
version=2, # 尺寸
error_correction=qrcode.constants.ERROR_CORRECT_H, # 容错信息当前为 30% 容错
box_size=10, # 每个格子的像素大小
border=4 # 边框格子宽度
) # 设置二维码的大小
try:
qr.add_data(data)
# 生成二维码图片,fill_color二维码颜色,back_color二维码背景颜色
img = qr.make_image(fill_color='green', back_color="white")code>
# 用时间戳命名文件
filename = str(time.time()).split('.')[0] + '.png'
file = os.path.join(source, filename)
img.save(file)
print(f"二维码{ filename}生成成功")
except Exception as e:
print(f"生成失败:{ e}")
if __name__ == '__main__':
source_path = r'code_img'
data = 'https://blog.csdn.net/powerbiubiu'
get_qr_code_image(source_path, data)
以下为生成的二维码图片
4.2 生成带头像的二维码
加载logo图片需要用PIL库,所以需要安装
<code>pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
from PIL import Image
import qrcode
def get_qr_code_image_by_logo(source: str, data: str) -> None:
"""
生成二维码
:param source: 保存路径
:param data: 数据
:return:
"""
if not os.path.exists(source):
os.makedirs(source)
qr = qrcode.QRCode(
version=2, # 尺寸
error_correction=qrcode.constants.ERROR_CORRECT_H, # 容错信息当前为 30% 容错
box_size=10, # 每个格子的像素大小
border=4 # 边框格子宽度
) # 设置二维码的大小
try:
qr.add_data(data)
# 生成二维码图片,fill_color二维码颜色,back_color二维码背景颜色
img = qr.make_image(fill_color='green', back_color="white")code>
# 用时间戳命名文件
filename = str(time.time()).split('.')[0] + '.png'
file = os.path.join(source, filename)
# 添加logo,打开logo照片
icon = Image.open("code_img/1.jpg")
# 获取图片的宽高
img_w, img_h = img.size
# 参数设置logo的大小
factor = 5
size_w = int(img_w / factor)
size_h = int(img_h / factor)
icon_w, icon_h = icon.size
if icon_w > size_w:
icon_w = size_w
if icon_h > size_h:
icon_h = size_h
# 重新设置logo的尺寸
icon = icon.resize((icon_w, icon_h))
# 得到画图的x,y坐标,居中显示
w = int((img_w - icon_w) / 2)
h = int((img_h - icon_h) / 2)
# 黏贴logo照
img.paste(icon, (w, h), mask=None)
# 保存
img.save(file)
print(f"二维码{ filename}生成成功")
except Exception as e:
print(f"生成失败:{ e}")
if __name__ == '__main__':
source_path = r'code_img'
data = 'https://blog.csdn.net/powerbiubiu'
get_qr_code_image_by_logo(source_path, data)
以下为生成的二维码图片
💖 欢迎关注我的公众号
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。