在Python开发中,生成二维码是很多项目会涉及的功能,比如生成支付码、信息分享码等,qrcode库是专门用来实现该功能的轻量级工具,使用简单且功能丰富,能够满足大部分场景的二维码生成需求。

qrcode库安装方法
qrcode库支持通过pip包管理工具快速安装,打开终端执行以下命令即可完成安装:
# 安装qrcode库,同时会自动安装依赖的Pillow库用于图像处理 pip install qrcode[pil]
如果只需要基础功能,也可以只安装qrcode核心库,不过建议安装带pil后缀的版本,方便后续对二维码样式进行自定义调整。
基础二维码生成
安装完成后,只需要几行代码就可以生成最基础的二维码,以下是生成包含文本信息的二维码示例:
import qrcode
# 创建QRCode对象
qr = qrcode.QRCode(
version=1, # 二维码版本,1-40,数值越大尺寸越大
error_correction=qrcode.constants.ERROR_CORRECT_L, # 纠错级别,L为7%容错
box_size=10, # 每个小格子的像素大小
border=4, # 边框宽度,默认是4
)
# 添加数据
qr.add_data("这是用Python生成的第一个二维码")
# 编译数据
qr.make(fit=True)
# 生成二维码图像
img = qr.make_image(fill_color="black", back_color="white")
# 保存图像
img.save("basic_qrcode.png")
运行上述代码后,会在当前目录生成名为basic_qrcode.png的二维码图片,用手机扫描即可看到对应的文本内容。
自定义二维码样式
qrcode库支持自定义二维码的前景色、背景色,还可以调整二维码的尺寸,以下是自定义样式的示例:
import qrcode
# 直接调用make方法快速生成二维码
qr_img = qrcode.make(
data="https://ipipp.com", # 二维码包含的内容,这里替换为目标网址
version=3,
error_correction=qrcode.constants.ERROR_CORRECT_H, # 最高纠错级别,支持30%容错
box_size=15,
border=2,
fill_color="blue", # 前景色设为蓝色
back_color="#f0f0f0" # 背景色设为浅灰色
)
qr_img.save("custom_qrcode.png")
生成带logo的二维码
如果需要生成带品牌logo的二维码,可以结合Pillow库实现,需要注意的是logo尺寸不能过大,否则会影响二维码的识别:
import qrcode
from PIL import Image
# 生成基础二维码
qr = qrcode.QRCode(
version=5,
error_correction=qrcode.constants.ERROR_CORRECT_H, # 带logo需要高纠错级别
box_size=10,
border=4
)
qr.add_data("带logo的二维码示例")
qr.make(fit=True)
qr_img = qr.make_image(fill_color="black", back_color="white").convert("RGBA")
# 打开logo图片
logo = Image.open("logo.png") # 替换为你的logo路径
# 调整logo尺寸,最大不超过二维码的1/5
qr_width, qr_height = qr_img.size
logo_size = int(qr_width / 5)
logo = logo.resize((logo_size, logo_size), Image.Resampling.LANCZOS)
# 计算logo放置位置,居中显示
logo_pos = ((qr_width - logo_size) // 2, (qr_height - logo_size) // 2)
# 将logo粘贴到二维码上
qr_img.paste(logo, logo_pos, logo)
# 保存带logo的二维码
qr_img.save("qrcode_with_logo.png")
常见问题说明
- 二维码无法识别:检查纠错级别是否过低,或者logo尺寸过大,建议纠错级别设为H,logo尺寸不超过二维码的1/4
- 中文内容乱码:qrcode库默认支持UTF-8编码,只要添加的中文内容是UTF-8格式就不会出现乱码问题
- 生成速度慢:如果二维码版本过高(version数值大)或者box_size设置过大,会增加生成时间,可根据实际需求调整参数
参数说明表
| 参数名 | 含义 | 可选值 |
|---|---|---|
| version | 二维码版本,决定二维码尺寸 | 1-40,None表示自动适配 |
| error_correction | 纠错级别 | ERROR_CORRECT_L(7%)、M(15%)、Q(25%)、H(30%) |
| box_size | 每个小格子的像素数 | 正整数,默认10 |
| border | 边框宽度 | 正整数,默认4 |
| fill_color | 二维码前景色 | 颜色名称或十六进制颜色码 |
| back_color | 二维码背景色 | 颜色名称或十六进制颜色码 |