QRCode
qrcode 库可以轻松生成二维码图片,支持自定义颜色、大小和样式。
安装
pip install qrcode pillow
生成基本二维码
import qrcode
# 创建二维码
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
# 添加数据
qr.add_data('https://www.example.com')
qr.make(fit=True)
# 生成图片
img = qr.make_image(fill_color="black", back_color="white")
# 保存图片
img.save('qrcode.png')
print("二维码已保存为 qrcode.png")
自定义二维码样式
import qrcode
# 创建二维码
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data('Hello, QRCode!')
qr.make(fit=True)
# 自定义颜色
img = qr.make_image(fill_color="blue", back_color="yellow")
# 保存
img.save('custom_qrcode.png')
生成带 Logo 的二维码
import qrcode
from PIL import Image
# 生成二维码
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_color="black", back_color="white").convert('RGB')
# 打开 Logo
logo = Image.open('logo.png')
# 计算 Logo 大小(为二维码的 1/5)
box_size = img.size[0] // len(qr.modules)
logo_size = box_size * len(qr.modules) // 5
# 调整 Logo 大小
logo = logo.resize((logo_size, logo_size), Image.Resampling.LANCZOS)
# 计算 Logo 位置
pos = ((img.size[0] - logo_size) // 2, (img.size[1] - logo_size) // 2)
# 粘贴 Logo
img.paste(logo, pos)
# 保存
img.save('qrcode_with_logo.png')
批量生成二维码
import qrcode
import os
# 数据列表
data_list = [
('https://www.example.com', 'example_qr.png'),
('https://www.google.com', 'google_qr.png'),
('https://www.github.com', 'github_qr.png'),
]
# 批量生成
for data, filename in data_list:
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save(filename)
print(f"已生成: {filename}")
生成彩色二维码
import qrcode
from PIL import Image
# 生成二维码
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data('彩色二维码')
qr.make(fit=True)
# 创建二维码图片
img = qr.make_image(fill_color="black", back_color="white").convert('RGB')
# 获取像素数据
pixels = img.load()
# 自定义颜色(渐变效果)
for y in range(img.size[1]):
for x in range(img.size[0]):
if pixels[x, y] == (0, 0, 0): # 黑色像素
# 创建渐变色
r = int(255 * x / img.size[0])
g = int(255 * y / img.size[1])
b = 200
pixels[x, y] = (r, g, b)
# 保存
img.save('gradient_qrcode.png')
错误纠正级别
import qrcode
# ERROR_CORRECT_L: 约 7% 的错误可纠正
# ERROR_CORRECT_M: 约 15% 的错误可纠正
# ERROR_CORRECT_Q: 约 25% 的错误可纠正
# ERROR_CORRECT_H: 约 30% 的错误可纠正
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H, # 最高级别
box_size=10,
border=4,
)
qr.add_data('高容错二维码')
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save('high_error_correction_qr.png')
读取二维码
from PIL import Image
import cv2
# 方法1: 使用 OpenCV
img = cv2.imread('qrcode.png')
detector = cv2.QRCodeDetector()
data, bbox, _ = detector.detectAndDecode(img)
print(f"二维码内容: {data}")
# 方法2: 使用 pyzbar
# pip install pyzbar
from pyzbar.pyzbar import decode
img = Image.open('qrcode.png')
result = decode(img)
for obj in result:
print(f"二维码内容: {obj.data.decode('utf-8')}")
💡 提示:二维码的错误纠正级别越高,可以容纳的数据越少,但抗损坏能力越强。