This commit is contained in:
yumoqing 2026-02-25 18:46:09 +08:00
parent fe29022e8d
commit 0e00b9560a

View File

@ -1,3 +1,4 @@
from PIL import Image
import qrcode
def gen_qr(data, path):
@ -14,3 +15,43 @@ def gen_qr(data, path):
img = qr.make_image(fill_color="black", back_color="white")
img.save(path)
def gen_qr_withlogo(data, path, logopath=None, logoloc='cc'):
"""
data: 二维码数据
path二维码保存路径
logopath: logo图标路径
logoloc: logo存放路径 cc中心br右下
"""
# 1. 创建高纠错二维码(即使放角落也建议保留 H 级)
qr = qrcode.QRCode(
version=5,
error_correction=qrcode.constants.ERROR_CORRECT_H, # 仍建议保留
box_size=10,
border=4,
)
data = "https://www.example.com"
qr.add_data(data)
qr.make(fit=True)
qr_img = qr.make_image(fill_color="black", back_color="white").convert('RGB')
qr_width, qr_height = qr_img.size
if logopath:
# 2. 加载并调整 Logo 大小
logo = Image.open(logopath) # 支持 PNG含透明通道
# 比居中时可稍大一点,但仍建议 ≤1/5
logo_size = min(qr_width, qr_height) // 5
logo = logo.resize((logo_size, logo_size), Image.Resampling.LANCZOS)
if logoloc == 'br':
# 3. 计算右下角位置留3一点边距更美观
margin = 10 # 距离右边缘和下边缘的像素
pos = (qr_width - logo_size - margin, qr_height - logo_size - margin)
else:
pos = ((qr_width - logo_size) // 2, (qr_height - logo_size) // 2)
# 4. 粘贴 Logo自动处理透明通道
qr_img.paste(logo, pos, mask=logo.split()[-1] if logo.mode in ('RGBA', 'LA') else None)
# 5. 保存
qr_img.save(path)