如何使用Segno生成含邮件联系人信息且中心带Logo的二维码?
问题
我正在寻找可用于生成包含邮件联系人信息且中心带有Logo的二维码的库。Segno似乎颇为流行,且具备生成艺术二维码的能力,但我未能找到任何中心带Logo的简单二维码示例。
我已生成了几个包含相关邮件数据的POC二维码,效果十分理想,请问有人知道Segno是否支持在二维码中心添加Logo吗?
基础邮件二维码示例
from segno import helpers qrcode = helpers.make_mecard(name='Doe,John', email='me@example.org', phone='+1234567') # 部分参数支持多值,比如邮箱、电话、网址 qrcode = helpers.make_mecard(name='Doe,John', email=('me@example.org', 'another@example.org'), url=['http://www.example.org', 'https://example.org/~joe']) qrcode.save('emailCode.svg', scale=4)
回答
Segno本身没有直接内置添加中心Logo的功能,但可以借助Python的Pillow(PIL)库实现该需求——Segno支持将二维码转换为PIL图像对象,之后就能轻松把Logo叠加到二维码中心。
具体实现步骤及示例代码如下:
- 用Segno生成目标MECARD二维码并转为PIL图像
- 加载Logo图片并调整尺寸(建议Logo边长不超过二维码的1/4,避免影响扫码识别)
- 计算Logo在二维码中的中心位置
- 叠加Logo并保存最终图像
from segno import helpers from PIL import Image # 生成MECARD二维码 qrcode = helpers.make_mecard( name='Doe,John', email=('me@example.org', 'another@example.org'), url=['http://www.example.org', 'https://example.org/~joe'] ) # 将二维码转为PIL图像,scale控制二维码大小 qr_img = qrcode.to_pil(scale=4) # 加载并调整Logo尺寸 logo_path = 'logo.png' # 替换为你的Logo文件路径 logo = Image.open(logo_path).convert("RGBA") max_logo_size = min(qr_img.size) // 4 # Logo最大尺寸设为二维码边长的1/4 logo.thumbnail((max_logo_size, max_logo_size)) # 计算Logo的中心位置 qr_width, qr_height = qr_img.size logo_width, logo_height = logo.size pos_x = (qr_width - logo_width) // 2 pos_y = (qr_height - logo_height) // 2 # 叠加Logo到二维码中心 qr_img.paste(logo, (pos_x, pos_y), logo) # 保存带Logo的二维码 qr_img.save('qrcode_with_logo.png')
注意事项:
- 优先使用背景透明的Logo(如PNG格式),叠加效果更美观
- 若需生成SVG格式的带Logo二维码,可使用svgutils等SVG编辑库,原理类似:生成SVG二维码后插入Logo元素到中心位置
内容的提问来源于stack exchange,提问作者iNoob
相关产品推荐
相关产品推荐

