bugfix
This commit is contained in:
parent
fe29022e8d
commit
0e00b9560a
@ -1,3 +1,4 @@
|
|||||||
|
from PIL import Image
|
||||||
import qrcode
|
import qrcode
|
||||||
|
|
||||||
def gen_qr(data, path):
|
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 = qr.make_image(fill_color="black", back_color="white")
|
||||||
img.save(path)
|
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