在日常开发中,生成二维码是常见需求,尤其是在自动化脚本、数据分发、移动端扫码场景中。Python 的 python-qrcode 库提供了一个纯 Python 实现的二维码生成器,无需依赖外部库,支持参数化定制和多种输出格式。本文基于该库的 QRCode 核心类,详细讲解安装流程、构造参数、数据添加、图像输出,并深入分析错误纠正级别的选择与自定义颜色、大小等高级用法。
- pip install python-qrcode[pil]
复制代码
安装时附加 [pil] 会自动安装 Pillow 库,用于图像处理。安装完成后导入库并确认版本:
- import qrcode
- print(qrcode.__version__)
复制代码
一、QRCode 类构造参数详解
QRCode 类是生成二维码的核心,其构造方法支持以下参数:
- version:二维码尺寸版本(1~40),1 最小,40 最大。版本越高容量越大。
- error_correction:纠错级别,取值:
- ERROR_CORRECT_L:约7%纠错
- ERROR_CORRECT_M:约15%纠错(默认)
- ERROR_CORRECT_Q:约25%纠错
- ERROR_CORRECT_H:约30%纠错
- box_size:每个小格(像素点)的像素数。
- border:二维码边界空白格的数目(默认为4)。
实例化示例:
- qr = qrcode.QRCode(
- version=1,
- error_correction=qrcode.constants.ERROR_CORRECT_M,
- box_size=10,
- border=4
- )
复制代码
二、添加数据与生成图像
使用 add_data() 添加待编码的数据(字符串、URL等),然后调用 make(fit=True) 自动适配版本大小。最后通过 make_image() 输出图片:
- qr.add_data('https://www.example.com')
- qr.make(fit=True)
- img = qr.make_image(fill_color="black", back_color="white")
- img.save('example_qrcode.png')
复制代码
fill_color 控制二维码前景色,back_color 控制背景色,支持颜色名称或 RGB 元组。例如设置蓝色前景:
- img = qr.make_image(fill_color=(0, 176, 240), back_color=(255, 255, 255))
复制代码
make_image() 默认使用 PIL 生成 PNG 图片,也可通过 image_factory 参数指定其他图像库,如 Pillow 的 Image 类。
三、调整二维码图片大小
生成图片后可使用 resize() 方法改变尺寸:
- img = img.resize((500, 500), resample=3)
- img.save('large_qrcode.png')
复制代码
注意 resize 会改变像素尺寸,不影响二维码数据正确性。
四、错误纠正级别的选择与影响
高纠错级别能容忍更多污损或遮挡,但会减少数据容量。例如设置最高纠错级别:
- qr = qrcode.QRCode(
- version=1,
- error_correction=qrcode.constants.ERROR_CORRECT_H,
- box_size=10,
- border=4
- )
- qr.add_data('https://www.example.com')
- qr.make(fit=True)
- img = qr.make_image(fill='black', back_color='white')
- img.save('high_correction_qrcode.png')
复制代码
实际应用场景:户外广告牌、易磨损的标签建议使用 H 级;纸质印刷物、内部系统可使用 L 级以容纳更多数据。
五、支持多数据类型与链接跳转
二维码可编码文本、URL、电话号码等。对于电话,建议前缀 tel:+国际编码:
- qr.add_data('tel:+123456789')
复制代码
生成包含 URL 的二维码后,用户扫码即可跳转网页。若需嵌入网页并通过 JavaScript 处理点击事件,可整合前后端:
- <html>
- <body>
- <img src="web_qrcode.png" id="qrcode" onclick="window.location.href=this.src;">
- </body>
- </html>
复制代码
六、扩展:在二维码中心嵌入 Logo
结合 Pillow 的 paste 方法,可将 Logo 图片叠加到二维码中心:
- from PIL import Image
- import qrcode
- qrcode_img = qrcode.make('https://www.example.com')
- logo = Image.open('logo.png')
- w, h = qrcode_img.size
- logo_w, logo_h = logo.size
- left = (w - logo_w) // 2
- top = (h - logo_h) // 2
- qrcode_img.paste(logo, (left, top))
- qrcode_img.save('logo_qrcode.png')
复制代码
注意:嵌入 Logo 会遮挡部分数据点,需选择较高纠错级别以保证可识别。
七、总结
通过 python-qrcode 库,开发者可以快速生成定制化的二维码。关键要点:合理设置 version 控制容量;根据场景选择 error_correction 平衡纠错与密度;利用 make_image 参数自定义颜色;结合 Pillow 实现图片缩放与 Logo 嵌入。在实际项目中,建议先测试不同参数组合下的扫码兼容性,确保在多种扫描器上表现一致。 |