bugfix
This commit is contained in:
parent
fe29022e8d
commit
0e00b9560a
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user