原文链接:http://www.juzicode.com/python-module-qrcode
qrcode是一个轻量级二维码生成库,支持快速创建符合 QR 码标准的图像。通过简单 API 可自定义尺寸、颜色、容错等级(L/M/Q/H)及嵌入 Logo。默认输出 PIL 图像对象,可保存为 PNG/SVG 等格式,兼容终端文本输出。依赖 Pillow 库处理图形,适合生成动态二维码标签、支付链接或信息加密场景,代码简洁高效。
应用场景
- 移动支付收款码生成
- 产品防伪标签制作
- 电子票务核验系统
- 企业名片信息编码
- 资产设备追踪管理
安装与导入
# juzicode.com/VX公众号:juzicode
pip install qrcode[pil]
import qrcode
使用方法
1. 生成基础QR码
本示例演示生成包含URL的基本QR码。通过QRCode类设置版本(尺寸)和容错率,add_data添加数据,make_image生成图像。box_size控制像素块大小,border设置白色边框宽度。最后保存为PNG文件。
# juzicode.com/VX公众号:juzicode
import qrcode
qr = qrcode.QRCode(
version=5,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data('http://www.juzicode.com')
img = qr.make_image(fill_color="black", back_color="white")
img.save("basic_qr.png")
运行结果:
生成500x500像素的QR码图像

2. 生成彩色QR码
通过fill_color和back_color参数自定义QR码颜色。此示例生成蓝底黄码的样式,提升品牌识别度。注意保持前景色与背景色足够对比以确保可扫描性。
# juzicode.com/VX公众号:juzicode
import qrcode
qr = qrcode.QRCode()
qr.add_data('vx:juzicode')
img = qr.make_image(fill_color="#FFD700", back_color="#4169E1")
img.save("color_qr.jpg")
运行结果:
生成金色二维码+蓝色背景的JPG文件

3. 添加中心LOGO
使用Pillow库将LOGO合成到QR码中心。先加载QR码和LOGO图片,计算合适的位置尺寸,保持LOGO不超过QR码面积的20%以确保可识别性。
# juzicode.com/VX公众号:juzicode
from PIL import Image
import qrcode
qr_img = qrcode.make('http://www.juzicode.com').convert('RGB')
logo = Image.open('logo.png')
logo_size = int(qr_img.size[0] * 0.2)
logo = logo.resize((logo_size, logo_size))
pos = ((qr_img.size[0]-logo_size)//2, (qr_img.size[1]-logo_size)//2)
qr_img.paste(logo, pos)
qr_img.save('qr_with_logo.jpg')
运行结果:
生成带中心LOGO的复合QR码

4. 生成动态数据QR码
结合时间戳生成动态QR码,适用于临时票务系统。使用f-string格式化嵌入生成时间,设置较短的有效期。
# juzicode.com/VX公众号:juzicode
from datetime import datetime
import qrcode
timestamp = datetime.now().strftime("%Y%m%d%H%M")
dynamic_data = f"EVENT-{timestamp}-12345"
qrcode.make(dynamic_data).save("dynamic_qr.png")
运行结果:
生成包含时间戳的动态QR码
5. 艺术化样式QR码
使用StyledPilImage创建圆形模块的QR码。通过module_drawer参数选择形状,支持圆形、圆角矩形等样式,提升视觉效果。
# juzicode.com/VX公众号:juzicode
import qrcode
from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.moduledrawers import CircleModuleDrawer
qr = qrcode.QRCode(image_factory=StyledPilImage)
qr.add_data('ARTISTIC QR')
img = qr.make_image(module_drawer=CircleModuleDrawer())
img.save("artistic_qr.png")
运行结果:
生成圆形像素块的QR码

6. 生成渐变色彩QR码
使用径向渐变填充QR码,通过Pillow的ImageDraw创建渐变背景。先将QR码转为灰度图,再应用颜色查找表实现渐变效果。
# juzicode.com/VX公众号:juzicode
from PIL import Image, ImageDraw
import qrcode
# 生成基础QR码
qr_img = qrcode.make('GRADIENT QR').convert('L')
# 创建渐变画布
gradient = Image.new('RGB', qr_img.size)
draw = ImageDraw.Draw(gradient)
for y in range(qr_img.height):
draw.line([(0,y), (qr_img.width,y)],
fill=(int(255*y/qr_img.height), 100, 200))
# 应用渐变
gradient.putalpha(qr_img)
gradient.save("gradient_qr.png")
运行结果:
生成顶部蓝色到底部粉色的渐变QR码

总结
qrcode模块为QR码生成提供灵活解决方案:
- 支持标准与艺术化样式
- 提供多层级容错率设置
- 兼容多种图像格式输出
- 易于集成到各类应用
注意事项:
- 公共场合QR码需包含必要文字说明
- 容错率至少保持20%以上可靠性
- 避免使用低对比度的颜色组合