快速生成二维码——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)

以下为生成的二维码图片

1705835116.png

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)

以下为生成的二维码图片

1705835508.png

💖 欢迎关注我的公众号

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。