
Python QR Code生成二维码
qrcode 是一个用于生成二维码的 Python 库,使用方便。它允许用户轻松将文本、URL 等数据编码为二维码图像。
¶主要特点
- 简单易用:只需几行代码即可生成基础二维码
- 高度定制:
- 版本控制(1-40)
- 纠错级别(L/M/Q/H)
- 方块尺寸调整
- 边框宽度设置
- 多格式输出:支持 PNG/JPEG/SVG 图片格式,兼容终端 ASCII 显示
¶安装
1 | pip install qrcode |
¶基础用法
在命令行中,使用已安装的 qr 脚本:
1 | qr "Some text" > test.png |
在 Python 中使用 make 快捷方式功能:
1 | import qrcode |
¶参数说明
参数 | 说明 |
---|---|
version | 二维码尺寸 (1-40),值越大尺寸越大 |
box_size | 每个小方块的像素大小 |
border | 二维码外边框的方块数量 |
fill_color | 二维码填充颜色(支持十六进制/RGB) |
image_factory | 输出格式(默认 PIL,可选 SVG) |
¶纠错级别说明(error_correction)
- ERROR_CORRECT_L 表示低纠错级别,损坏的部分不超过 7%,就仍然可以被正确解码。
- ERROR_CORRECT_M 默认纠错级别,适用于大多数常见的应用场景,损坏的部分不超过 15%,就仍然可以被正确解码。
- ERROR_CORRECT_Q 在户外环境中张贴的海报上的二维码,或者可能会被折叠、涂抹的纸质二维码,纠错能力 25%。
- ERROR_CORRECT_H 在工业环境中被油污、灰尘覆盖的二维码标签,纠错能力 30%。
¶IImage factories
¶终端显示 ASCII 二维码
1 | import qrcode |
¶生成 SVG 格式二维码
1 | import qrcode |
¶Styled Image
这些 QR Codes 不能保证适用于所有阅读器,建议 error correction 设置为 High(尤其是在嵌入图像)。
StyledPilImage 是 qrcode 库中用于生成 样式化二维码图像 的类,基于 Pillow(PIL)库。它允许你通过不同的 module_drawer(模块绘制器)和颜色参数,自定义二维码的模块形状、颜色和整体视觉效果。
¶核心功能
-
模块形状自定义
通过 module_drawer 参数,可以改变二维码模块(黑白色块)的几何形状。常用的内置绘制器包括:- 方形模块:SquareModuleDrawer(默认)
- 圆形模块:CircleModuleDrawer
- 圆角矩形模块:GappedSquareModuleDrawer
- 其他形状:可自定义实现。
-
颜色自定义
- 前景色:二维码主色(通常是黑色)
- 背景色:二维码背景色(通常是白色)
- 渐变色支持:通过 Pillow 的 ImageColor 实现动态颜色过渡。
¶代码示例
生成带有圆形模块的二维码:
1 | import qrcode |
生成渐变效果的二维码:
1 | from PIL import ImageColor |
¶module_drawer (模块绘制器) 详解
- 内置模块绘制器
绘制器类名 | 效果描述 | 适用场景 |
---|---|---|
SquareModuleDrawer | 默认方形模块 | 传统二维码样式 |
CircleModuleDrawer | 圆形模块,视觉更柔和 | 创意设计、品牌宣传 |
GappedSquareModuleDrawer | 圆角矩形模块(间隙更明显) | 高容错率下的美观设计 |
VerticalBarsDrawer | 垂直条形模块 | 艺术化风格输出 |
- 自定义绘制器
实现一个 星形模块 的示例:
1 | from qrcode.image.styles.moduledrawers.base import ModuleDrawer |
¶定位标记独立样式
通过 eye_drawer 参数单独设置二维码的定位标记(三个角上的大方块)形状:
1 | from qrcode.image.styles.moduledrawers import SquareModuleDrawer, CircleModuleDrawer |
¶动态颜色逻辑
结合 Pillow 的 ImageDraw 实现动态颜色逻辑,例如根据模块位置生成不同颜色:
1 | def dynamic_color_mask(width, height): |
¶注意事项
-
可扫描性
过度复杂的样式(如低对比度颜色、密集渐变)可能导致扫码失败。建议:- 保持前景与背景对比度 > 70%
- 使用 error_correction=qrcode.constants.ERROR_CORRECT_H(最高容错率)
-
性能问题
自定义绘制器或复杂颜色计算可能增加生成时间,尤其是大尺寸二维码。
- 感谢您的赞赏
赞赏名单
因为您的支持,我才能够实现写作的价值。
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自Hinerの小窝