Python 生成二维码图片:qrcode 库入门与自定义样式
Python 用 qrcode 库把 URL、文本、WiFi 配置生成二维码 PNG,支持自定义颜色、尺寸、边框和中心 logo,给出完整可运行代码和常见问题。
场景痛点
做活动物料要批量生成跳转链接二维码、员工工牌要印个人主页二维码、展会海报要放微信群二维码,在线工具一次只能生成一张,样式也有限。用 Python 的 qrcode 库,几十行代码就能批量出图,颜色、大小、边框都能定制。
用到的库
pip install qrcode[pil]
带 [pil] 是为了同时安装 Pillow,把二维码存成 PNG 图片。
完整代码
import qrcode
from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.moduledrawers import RoundedModuleDrawer
from qrcode.image.styles.colormasks import SolidFillColorMask
def make_basic_qr(data, save_path):
"""最基础的黑白二维码"""
img = qrcode.make(data)
img.save(save_path)
print(f"已生成基础二维码:{save_path}")
def make_styled_qr(data, save_path):
"""自定义颜色、圆角模块、边框的二维码"""
qr = qrcode.QRCode(
version=5, # 1-40,越大能存内容越多
error_correction=qrcode.constants.ERROR_CORRECT_M, # 容错率 15%
box_size=10, # 每个小方块像素
border=4, # 边框厚度
)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(
image_factory=StyledPilImage,
module_drawer=RoundedModuleDrawer(),
color_mask=SolidFillColorMask(
back_color=(255, 255, 255),
front_color=(30, 100, 200), # 深蓝色前景
),
)
img.save(save_path)
print(f"已生成样式二维码:{save_path}")
def make_wifi_qr(ssid, password, save_path):
"""生成 WiFi 分享二维码,手机扫码直接连网"""
wifi_str = f"WIFI:T:WPA;S:{ssid};P:{password};;"
img = qrcode.make(wifi_str)
img.save(save_path)
print(f"已生成 WiFi 二维码:{save_path}")
def main():
make_basic_qr("https://www.example.com", "qr_basic.png")
make_styled_qr("https://www.example.com/about", "qr_styled.png")
make_wifi_qr("Office-5G", "12345678", "qr_wifi.png")
if __name__ == "__main__":
main()
代码讲解
qrcode.make(data)一行就能生成二维码对象,save(path)直接写 PNG 文件,最适合快速出图。QRCode类可以精细控制:version决定二维码密度,box_size决定像素大小,border是白边厚度。error_correction容错等级分 L/M/Q/H 四档,H 容错 30%,适合中间放 logo 的场景。StyledPilImage配合RoundedModuleDrawer()可以把方点变成圆点,视觉更柔和;SolidFillColorMask改前景背景色。- WiFi 二维码是有标准格式的,按
WIFI:T:WPA;S:SSID;P:PWD;;拼接,手机扫码后会弹出"是否连接"。
运行结果
运行后当前目录生成三张 PNG:qr_basic.png 是标准黑白码、qr_styled.png 是深蓝色圆角码、qr_wifi.png 是 WiFi 分享码。用手机相机对准任一张都能识别跳转。
注意事项
- 内容越长,二维码越密,
version要相应调大;fit=True会自动算。 - 容错等级越高,图案越密,扫描速度略受影响;常规用
ERROR_CORRECT_M足够。 - 中间贴 logo 时建议用
ERROR_CORRECT_H,logo 占比不超过 30%。 - 中文内容会自动按 UTF-8 编码,老版微信扫码可能识别乱码,建议先转 URL 或拼音。
- 保存路径含中文时,Pillow 3.x 以上一般没问题,但 Windows 控制台打印路径仍可能乱码。

更新时间:2026-09-14 20:39:25
上一篇:Python 随机生成密码:secrets 安全随机密码生成器