Python 二维码生成工具 Segno:轻量高效的全场景二维码实现指南
夸克资源分享:
表情包:https://pan.quark.cn/s/5b9ddeb237fe
工具箱:https://pan.quark.cn/s/aa2d6a730482,图吧、美蛋、路遥、入梦等
Fiddler Everywhere抓包:https://pan.quark.cn/s/6b1e2fbae019,
Adobe:https://pan.quark.cn/s/13e39cfeaadb,先看安装教程
JetBranis开发者工具:https://pan.quark.cn/s/16e94dcff1f7,先看安装教程下的jetbra教程
逆向工具:https://pan.quark.cn/s/50e93c8ca54c
前端项目搭建集锦:https://blog.youkuaiyun.com/randy521520/article/details/146998467
一、简介
Segno 是一款轻量、高性能且功能全面的 Python 二维码生成库,以极简的 API 设计和丰富的二维码类型支持著称,由 Lasse Karstensen 开发维护,是 Python 生态中生成二维码的优选工具之一。
该库核心优势在于轻量化 —— 无需依赖 PIL/Pillow 等图像库即可生成基础二维码,仅需 Python 3.6 + 环境即可运行,安装仅需pip install segno,部署成本极低。它支持生成从 Version 1(21×21 模块)到 Version 40(177×177 模块)的 QR Code,同时兼容 Micro QR Code(微型二维码),满足不同场景下的尺寸需求,尤其适合嵌入式设备、小型标签等轻量化应用场景。
Segno 的功能覆盖二维码生成全流程:支持自定义纠错级别(L/M/Q/H),可灵活调整容错率以适配不同使用环境;支持添加 LOGO、自定义前景 / 背景色、调整模块大小与边框宽度,还能导出为 PNG、SVG、EPS、PDF 等多种格式,兼顾矢量图与位图需求。其 API 设计简洁直观,仅需几行代码即可生成二维码,例如import segno; qr = segno.make(‘Hello World’); qr.save(‘hello.png’)就能快速生成基础二维码,进阶用法如设置纠错级别、调整尺寸也仅需简单参数配置。
此外,Segno 还支持生成结构化数据二维码(如 vCard、WiFi 配置、地理位置等),内置常见数据格式的封装,无需手动拼接格式字符串,大幅降低开发成本。相较于其他二维码库,Segno 在生成速度和内存占用上表现更优,且文档完善、社区维护活跃,既适合快速实现基础需求,也能满足定制化二维码开发的进阶场景,广泛应用于自动化脚本、Web 应用、批量生成二维码等场景。
二、标准二维码
1.代码示例,所有类型的二维码都是基于segno.make函数封装
import segno
qrcode = segno.make('Hello word', version=10)
qrcode.save('mak.svg', border=1)
qrcode.save('make.png', border=1)
qrcode.save('make.eps', border=1)
qrcode.save('make.txt', border=1)
qrcode = segno.make_qr('Hello word', version=10)
qrcode.save('make_qr.svg', border=1)
qrcode.save('make_qr.png', border=1)
qrcode.save('make_qr.eps', border=1)
qrcode.save('make_qr.txt', border=1)

2.segno.make参数
| 参数名 | 参数说明 |
|---|---|
| content | 必选, 待编码的内容(支持ink): - 类型: Unicode字符串、整数、字节(bytes); - 若传入字节类型, 需通过encoding参数指定编码格式; 无默认值, 为核心必填项 |
| error | 可选, 纠错级别(大小写不敏感),默认None: - 取值: None/L/M/Q/H; - 默认逻辑: None时用级别、M(微型二维码 M1 版本无纠错, 指定纠错级别不全生成M1); - 纠错能力:L(7%)、M(15%)、Q(25%)、H(30%); - 约束: H 不支持微型二维码(Micro QR Code) |
| version | 可选, 二维码版本, 默认None: - 取值: 微型码为M1/M2/M3/M4; - (大小不写敏感), 普通码为1-40的整数; - 默认逻辑: 自动匹配能容纳内容的最小版本; - 若指定版本但内容超容量, 会抛出DataOverflowError |
| mode | 可选, 编码模式(大小写不敏感), 默认None: - 取值: numeric(数字)、alphanumeric(字母数字)、byte(字节)、kanji(日文汉字)、hanzi(中文汉字); - 默认逻辑: 自动检测适配的最优模式; - 版本约束: - numeric: 支持所有普通码(1-40)、所有微型码(M1-M4); - alphanumeric: 支持普通码(1-40)、微型码(M2-M4); - byte/kanji: 支持普通码(1-40)、微型码(M3-M4); - hanzi: 仅支持普通码(1-40), 需显式指定(非 ISO 标准, 部分扫码工具不兼容); - 若指定模式与版本不兼容, 抛出ValueError |
| mask | 可选, 数据掩码, 默认None: - 取值: 整数(有效掩码值)或None; - 默认逻辑: 自动选择最优掩码; - 若指定无效掩码值, 抛出ValueError |
| encoding | 可选, 编码格式(大小写不敏感), 默认None: - 默认逻辑: 优先尝试ISO/IEC 8859-1, 不兼容则用UTF-8; - 仅在mode=byte或content为字节类型时生效 |
| eci | 可选, 是否为默认ECI模式: - 作用: 布尔值, 默认False(非ISO/IEC 8859-1的二进制数据启用ECI模式); - 约束: ECI 模式不支持微型二维码; - 风险: 多数扫码工具不支持ECI模式, 默认禁用; - 若指定编码无对应ECI标识, 会抛出异常 |
| micro | 可选, 布尔值/None, 默认None: - 作用: 控制是否生成微型二维码(仅version=None时生效); - 取值逻辑: - None: 自动判断,内容适配则生成微型码; - False: 强制生成普通二维码; - True: 强制生成微型码,若模式/内容不兼容则抛出异常 |
| boost_error | 可选, 布尔值, 默认True: - 作用: 是否在不升级版本的前提下提升纠错级别; - True: error视为“最低纠错级别”,自动提升至最优; - False: 严格使用指定的error(或默认L级) |
3.segno.make.save通用参数(所有格式均支持)
| 参数名 | 参数说明 |
|---|---|
| out | 必选, 输出目标: 可传入文件名(如qrcode.png)或带name属性的可写类文件对象(如io.BytesIO/io.StringIO);若为无name的流对象, 需配合kind指定格式 |
| kind | 可选, 字符串(大小写不敏感), 指定输出格式(如svg/png/eps/pdf等);当out无法推断格式时(如流对象), 需显式指定 |
| scale | 可选, 整数/浮点数(部分格式仅支持整数), 表示单个二维码模块的尺寸: - 像素类格式(PNG/PBM): scale=4 → 1模块=4像素; - 矢量类格式(SVG/EPS/PDF): scale=1 → 1模块=1点(1/72英寸); 默认值: 1 |
| border | 可选, 整数, 指定二维码安静区(边框)的模块数:(QR Code 用4, Micro QR Code 用2), 设为0表示无边框, 建议至少设1(保证扫码识别) |
| dark | 可选, 深色模块的颜色值: 支持RGB元组((255,0,0))、网页颜色名(red)、16进制(#FF0000/#F00), 部分格式支持带透明度的#RRGGBBAA;默认值: black(不同格式略有差异) |
| light | 可选, 浅色模块的颜色值: 格式同dark;SVG为None(透明), PNG为white, EPS/PDF为None(透明), 设为None时部分格式(如SVG)不渲染浅色模块 |
4.segno.make.save模块颜色参数(精细化控制二维码各区域颜色)
| 参数名 | 参数说明 |
|---|---|
| finder_dark | 可选, 定位图案深色模块的颜色;默认None, 复用dark的值 |
| finder_light | 可选, 定位图案浅色模块的颜色;默认None, 复用light的值 |
| data_dark | 可选, 数据区域深色模块的颜色;默认None, 复用dark的值 |
| data_light | 可选, 数据区域浅色模块的颜色;默认None, 复用light的值 |
| version_dark | 可选, 版本信息深色模块的颜色;默认None, 复用dark的值 |
| version_light | 可选, 版本信息浅色模块的颜色;默认None, 复用light的值 |
| format_dark | 可选, 格式信息深色模块的颜色;默认None, 复用dark的值 |
| format_light | 可选, 格式信息浅色模块的颜色;默认None, 复用light的值 |
| alignment_dark | 可选, 对齐图案深色模块的颜色;默认None, 复用dark的值 |
| alignment_light | 可选, 对齐图案浅色模块的颜色;默认None, 复用light的值 |
| timing_dark | 可选, 时序图案深色模块的颜色;默认None, 复用dark的值 |
| timing_light | 可选, 时序图案浅色模块的颜色;默认None, 复用light的值 |
| separator | 可选, 分隔符颜色;默认None, 复用light的值 |
| dark_module | 可选, 单个深色模块(仅 QR Code 有)的颜色;默认None, 复用dark的值 |
| quiet_zone | 可选, 安静区(边框)颜色;默认None, 复用light的值 |
5.segno.make.save格式专属参数(仅对应格式支持)
| 格式 | 参数名 | 参数说明 |
|---|---|---|
| SVG | xmldecl | 可选, 布尔值, 是否包含 XML 头声明;默认True |
| SVG | svgns | 可选, 布尔值, 是否声明 SVG 命名空间;默认True(嵌入HTML5可设False) |
| SVG | title | 可选, 字符串, SVG 文档的标题;默认None |
| SVG | desc | 可选, 字符串, SVG 文档的描述;默认None |
| SVG | svgid | 可选, 字符串, SVG 元素的ID;默认None(无ID) |
| SVG | svgclass | 可选, 字符串, SVG 元素的CSS类;默认qrcode |
| SVG | lineclass | 可选, 字符串, 绘制深色模块的路径CSS类;默认qrcode-line |
| SVG | omitsize | 可选, 布尔值, 是否省略宽高属性(自动添加viewBox);默认False |
| SVG | unit | 可选, 字符串, 坐标单位(如px/cm/mm/in等);默认None(用户空间) |
| SVG | encoding | 可选, 字符串, XML 文档编码;默认utf-8 |
| SVG | svgversion | 可选, 浮点数, SVG 版本号;默认None(无版本属性) |
| SVG | compresslevel | 可选, 整数(仅svgz格式), 压缩级别(0-9);默认9 |
| SVG | draw_transparent | 可选, 布尔值, 是否添加透明路径;默认False |
| SVG | nl | 可选, 布尔值, 是否添加末尾换行;默认True |
| PNG | compresslevel | 可选, 整数, IDAT 数据块压缩级别(0-9);默认9 |
| PNG | dpi | 可选, 数值, 图片 DPI 值(自动转换为米单位);默认None |
| EPS | 无额外专属参数 | - |
| compresslevel | 可选, 整数, 压缩级别(0-9);默认9 | |
| TXT | 无scale支持, 仅dark/light | dark默认1, light默认0 |
| ANSI | 仅支持border | 无其他专属参数 |
| PBM | plain | 可选, 布尔值, 是否使用 P1 格式(过时);默认False(P4格式) |
| PAM | 无额外专属参数 | - |
| PPM | 无额外专属参数 | - |
| LaTeX | url | 可选, 字符串, 二维码关联的 URL(需 LaTeX 的hyperref包);默认None |
| XBM | name | 可选, 字符串, 变量名;默认img |
| XPM | name | 可选, 字符串, 变量名;默认img |
三、微型二维码
# 微型二维码,专为小尺寸、低数据量的应用场景设计,注意:微型二维码虽然可以生成,但是解码时会识别失败
import segno
qrcode = segno.make('Hello word', micro=True)
qrcode.save('hello-word(make).png', scale=10, border=1)
qrcode = segno.make_micro('Hello word')
qrcode.save('make_micro.png',scale=10, border=1)

四、彩色二维码
import segno
qrcode = segno.make('Hello world', version=4)
qrcode.save(
'qrcode.png',
scale=10,
border=4,
dark='#dc4b14',
finder_dark='#efa915',
data_dark = '#5e9730'
)

五、WIFI二维码
1.WIFI二维码,make_wifi与make_wifi_data功能上没什么区别。make_wifi用于快速生成, make_geo_data参数更多,可以配合segno.make生成二维码,使用手机自带的扫码会提示链接wifi
import segno
from segno import helpers
qrcode = helpers.make_wifi(ssid='Hello world', password='secret', security='WPA')
qrcode.save('make_wifi.png', border=1)
config = helpers.make_wifi_data(ssid='Hello world', password='secret', security='WPA')
qrcode = segno.make(config, version=10)
qrcode.save('make_wifi_data.png', border=1)

2.helpers.make_wifi参数
| 参数名 | 参数说明 |
|---|---|
| ssid | 必选, 字符串类型, 无线网络的 SSID(即 WiFi名称);无默认值, 为生成 WiFi配置二维码的核心必填项 |
| password | 可选, 字符串/None类型, WiFi的密码;默认值为None(无密码); - 若 WiFi有密码, 需传入对应字符串; - 若 WiFi无密码, 可设为None或不传入 |
| security | 可选, 字符串/None类型, WiFi的认证类型;默认值为None; - 取值: -“WEP”: WEP 加密方式; -“WPA”: WPA/WPA2/WPA3 加密方式; -“nopass”: 无密码(等效于None,但会显式写入"nopass"而非省略该字段); -None: 省略认证类型字段(无密码时推荐); - 约束: 若传入非WEP/WPA/nopass/None的取值, 可能导致二维码配置解析失败 |
| hidden | 可选, 布尔类型, 标识 WiFi 是否为隐藏网络(不广播 SSID);默认值为False(非隐藏); - True: 标记为隐藏网络, 扫码连接时需确认网络为隐藏; - False: 普通可见网络 |
3.helpers.make_wifi_data参数
| 参数名 | 参数说明 |
|---|---|
| name | 必选, 字符串类型, 联系人姓名:若包含逗号(,),逗号前视为姓氏(lastname), 逗号后视为名字(forename); |
| reading | 可选, 字符串/None类型, 通讯录中设置为假名姓名的文本(适配日通讯录);默认值None |
| 可选, 字符串/字符串可迭代对象(列表/元组)/None类型, 电子邮箱地址; - 支持单个邮箱(字符串)或多个邮箱(列表/元组); - 默认值None | |
| phone | 可选, 字符串/字符串可迭代对象/None类型, 电话号码; - 支持单个号码或多个号码; - 默认值None |
| videophone | 可选, 字符串/字符串可迭代对象/None类型, 视频通话电话号码; - 支持单个号码或多个号码; - 默认值None |
| memo | 可选, 字符串/None类型, 联系人备注信息;默认值None |
| nickname | 可选, 字符串/None类型, 联系人昵称;默认值None |
| birthday | 可选, 字符串/datetime.date对象/None类型, 出生日期; - 字符串格式需为YYYYMMDD(如19900101); - 若传入datetime.date对象, 会自动格式化为YYYYMMDD; - 默认值None |
| url | 可选, 字符串/字符串可迭代对象/None类型, 个人主页网址; - 支持单个网址或多个网址; - 默认值None |
| pobox | 可选, 字符串/None类型, 邮政信箱(地址信息);默认值None |
| roomno | 可选, 字符串/None类型, 房间号(地址信息);默认值None |
| houseno | 可选, 字符串/None类型, 门牌号(地址信息);默认值None |
| city | 可选, 字符串/None类型, 城市(地址信息);默认值None |
| prefecture | 可选, 字符串/None类型, 都道府县(日地址层级,对应国内“省/市”);默认值None |
| zipcode | 可选, 字符串/None类型, 邮政编码(地址信息);默认值None |
| country | 可选, 字符串/None类型, 国家(地址信息);默认值None |
六、地理二维码
1.地理二维码,make_geo与make_geo_data功能上没什么区别。make_geo用于快速生成, make_geo_data可以配合segno.make生成二维码
import segno
from segno import helpers
latitude, longitude = 38.8976763,-77.0365297
qrcode = helpers.make_geo(latitude, longitude)
qrcode.save('make_geo.png', border=1)
geo_str = helpers.make_geo_data(latitude, longitude)
qrcode = segno.make(geo_str, version=10)
qrcode.save('make_geo_data.png', border=1)

2.helpers.make_geo与helpers.make_geo_data参数相同
| 参数名 | 参数说明 |
|---|---|
| lat | 必选, 浮点型(float), 表示地理坐标的纬度;无默认值, 需传入有效的纬度数值(范围通常为-90~90) |
| lng | 必选, 浮点型(float), 表示地理坐标的经度;无默认值, 需传入有效的经度数值(范围通常为-180~180) |
七、邮箱二维码
1.邮箱二维码,make_email与make_make_email_data功能上没什么区别,make_email用于快速生成, make_make_email_data可以配合segno.make生成二维码,用手机自带的扫码会跳转到新建邮件
import segno
from segno import helpers
qrcode = helpers.make_email(
to='recipient@example.com',
subject='Custom Email QR',
body='Manual generate email QR code'
)
qrcode.save('make_email.png', border=1)
config = helpers.make_make_email_data(
to='recipient@example.com',
subject='Custom Email QR',
body='Manual generate email QR code'
)
qrcode = segno.make(config, version=10)
qrcode.save('make_make_email_data.png', border=1)

2.helpers.make_email与make_make_email_data参数相同
| 参数名 | 参数说明 |
|---|---|
| to | 必选, 字符串/字符串可迭代对象(列表/元组), 邮件收件人邮箱地址; - 支持单个邮箱(字符串)或多个邮箱(列表/元组,多个邮箱用逗号拼接); - 无默认值,若为空/None会抛出ValueError提示"to" must not be empty or None) |
| cc | 可选, 字符串/字符串可迭代对象/None类型, 邮件抄送(CC)收件人邮箱地址; - 支持单个或多个邮箱,多个邮箱用逗号拼接; - 默认值None(无抄送对象) |
| bcc | 可选, 字符串/字符串可迭代对象/None类型, 邮件密送(BCC)收件人邮箱地址; - 支持单个或多个邮箱,多个邮箱用逗号拼接; - 默认值None(无密送对象) |
| subject | 可选, 字符串/None类型, 邮件主题; - 若传入字符串,会自动对UTF-8编码后的内容进行URL转义; - 默认值None(无邮件主题) |
| body | 可选, 字符串/None类型, 邮件正文内容; - 若传入字符串,会自动对UTF-8编码后的内容进行URL转义; - 默认值None(无邮件正文) |
八、轻量联系信息二维码
1.轻量联系信息二维码,make_mecard与make_mecard_data功能上没什么区别,make_mecard用于快速生成, make_mecard_data可以配合segno.make生成二维码,使用微信扫码显示是一个页面,使用手机自带的扫码会添加联系人
import segno
from segno import helpers
qrcode = helpers.make_mecard(
name='Doe,John',
email='me@example.org',
phone='+1234567',
url=['http://www.example.org', 'https://example.org/~joe']
)
qrcode.save('make_mecard.png', border=1)
config = helpers.make_mecard_data(
name='Doe,John',
email='me@example.org',
phone='+1234567',
url=['http://www.example.org', 'https://example.org/~joe']
)
qrcode = segno.make(config, version=10)
qrcode.save('make_mecard_data.png', border=1)

2.make_mecard与make_mecard_data参数相同
| 参数名 | 参数说明 |
|---|---|
| name | 必选, 字符串类型, 联系人姓名;若姓名中包含逗号(,),逗号前部分会被识别为姓氏(lastname),逗号后部分被识别为名字(forename);无默认值, 是生成MeCard的核心项。 |
| reading | 可选, 字符串/None类型, 用于在通讯录中设置为联系人的假名姓名(适配日通讯录场景);默认值为None。 |
| 可选, 字符串/字符串可迭代对象(列表/元组等)/None类型, 联系人电子邮箱地址;支持单个邮箱(字符串)或多个邮箱(可迭代对象);默认值为None。 | |
| phone | 可选, 字符串/字符串可迭代对象/None类型, 联系人电话号码;支持单个号码或多个号码;默认值为None。 |
| videophone | 可选, 字符串/字符串可迭代对象/None类型, 联系人视频通话电话号码;支持单个号码或多个号码;默认值为None。 |
| memo | 可选, 字符串/None类型, 关于该联系人的备注信息;默认值为None。 |
| nickname | 可选, 字符串/None类型, 联系人的昵称;默认值为None。 |
| birthday | 可选, 字符串/datetime.date对象/None类型, 联系人出生日期;若传入字符串,格式需为YYYYMMDD(如19900101);若传入datetime.date对象,会自动格式化为YYYYMMDD格式;默认值为None。 |
| url | 可选, 字符串/字符串可迭代对象/None类型, 联系人的个人主页网址;支持单个网址或多个网址;默认值为None。 |
| pobox | 可选, 字符串/None类型, 联系人地址中的邮政信箱信息;默认值为None。 |
| roomno | 可选, 字符串/None类型, 联系人地址中的房间号信息;默认值为None。 |
| houseno | 可选, 字符串/None类型, 联系人地址中的门牌号信息;默认值为None。 |
| city | 可选, 字符串/None类型, 联系人地址中的城市信息;默认值为None。 |
| prefecture | 可选, 字符串/None类型, 联系人地址中的都道府县信息(日系地址层级,对应国内“省/市”层级);默认值为None。 |
| zipcode | 可选, 字符串/None类型, 联系人地址中的邮政编码信息;默认值为None。 |
| country | 可选, 字符串/None类型, 联系人地址中的国家信息;默认值为None。 |
九、全面联系信息二维码
1.轻量联系信息二维码,make_vcard与make_vcard_data功能上没什么区别,make_vcard用于快速生成, make_vcard_data可以配合segno.make生成二维码,使用微信扫码显示是一个页面,使用手机自带的扫码会添加联系人
import segno
from segno import helpers
qrcode = helpers.make_vcard(
displayname='John Doe',
name='Doe,John',
email='me@example.org',
phone='+1234567',
url=['http://www.example.org', 'https://example.org/~joe']
)
qrcode.save('make_vcard.png', border=1)
config = helpers.make_vcard_data(
displayname='John Doe',
name='Doe,John',
email='me@example.org',
phone='+1234567',
url=['http://www.example.org', 'https://example.org/~joe']
)
qrcode = segno.make(config, version=10)
qrcode.save('make_vcard_data.png', border=1)

2.make_vcard与make_vcard_data参数相同
| 参数名 | 参数说明 |
|---|---|
| name | 必选, 字符串类型, 联系人姓名;若包含分号(;),分号前视为姓氏(lastname),分号后视为名(forename);无默认值, 是生成vCard 3.0的核心必填项。 |
| displayname | 必选, 字符串类型, 联系人的显示名(Common Name);无默认值, 用于通讯录中展示的友好名称。 |
| 可选, 字符串/字符串可迭代对象(列表/元组等)/None类型, 联系人电子邮箱地址;支持单个邮箱(字符串)或多个邮箱(可迭代对象);默认值为None。 | |
| phone | 可选, 字符串/字符串可迭代对象/None类型, 通用电话号码;支持单个号码或多个号码;默认值为None。 |
| fax | 可选, 字符串/字符串可迭代对象/None类型, 传真号码;支持单个或多个号码, 生成的vCard中会标记为TEL;TYPE=FAX;默认值为None。 |
| videophone | 可选, 字符串/字符串可迭代对象/None类型, 视频通话电话号码;支持单个或多个号码, 生成的vCard中会标记为TEL;TYPE=VIDEO;默认值为None。 |
| memo | 可选, 字符串/None类型, 联系人备注信息, 生成的vCard中对应NOTE字段;默认值为None。 |
| nickname | 可选, 字符串/None类型, 联系人昵称;默认值为None。 |
| birthday | 可选, 字符串/datetime.date对象/None类型, 联系人出生日期: - 字符串格式需为YYYY-MM-DD; - 传入datetime.date对象会自动格式化为YYYY-MM-DD; - 格式非法会抛出ValueError; |
| url | 可选, 字符串/字符串可迭代对象/None类型, 联系人个人主页/相关网址;支持单个或多个网址;默认值为None。 |
| pobox | 可选, 字符串/None类型, 联系人地址中的邮政信箱信息;默认值为None。 |
| street | 可选, 字符串/None类型, 联系人地址中的街道信息;默认值为None。 |
| city | 可选, 字符串/None类型, 联系人地址中的城市信息;默认值为None。 |
| region | 可选, 字符串/None类型, 联系人地址中的地区/省份信息;默认值为None。 |
| zipcode | 可选, 字符串/None类型, 联系人地址中的邮政编码信息;默认值为None。 |
| country | 可选, 字符串/None类型, 联系人地址中的国家信息;默认值为None。 |
| org | 可选, 字符串/None类型, 联系人所属公司/组织名称;默认值为None。 |
| lat | 可选, 浮点型/None类型, 联系人地理位置纬度;需与lng同时传入(仅传其一会抛出ValueError);默认值为None。 |
| lng | 可选, 浮点型/None类型, 联系人地理位置经度;需与lat同时传入(仅传其一会抛出ValueError);默认值为None。 |
| source | 可选, 字符串/None类型, 获取该vCard的来源URL;默认值为None。 |
| rev | 可选, 字符串/datetime.date对象/None类型, vCard的修订版本/最后修改日期; - 字符串格式需符合日期规范(如YYYY-MM-DD); - 传入datetime.date对象会自动格式化; - 格式非法会抛出ValueError |
| title | 可选, 字符串/字符串可迭代对象/None类型, 联系人的职位/头衔;支持单个或多个头衔;默认值为None。 |
| photo_uri | 可选, 字符串/字符串可迭代对象/None类型, 联系人头像的URI地址;支持单个或多个URI, 生成的vCard中标记为PHOTO;VALUE=uri;默认值为None。 |
| cellphone | 可选, 字符串/字符串可迭代对象/None类型, 联系人手机号码;支持单个或多个号码, 生成的vCard中标记为TEL;TYPE=CELL;默认值为None。 |
| homephone | 可选, 字符串/字符串可迭代对象/None类型, 联系人家庭电话号码;支持单个或多个号码, 生成的vCard中标记为TEL;TYPE=HOME;默认值为None。 |
| workphone | 可选, 字符串/字符串可迭代对象/None类型, 联系人工作电话号码;支持单个或多个号码, 生成的vCard中标记为TEL;TYPE=WORK;默认值为None。 |
十、EPC二维码
1.代码示例
from segno import helpers
qrcode = helpers.make_epc_qr(
name='Wikimedia Foerdergesellschaft',
iban='DE33100205000001194700',
amount=20, text='Spende fuer Wikipedia'
)
qrcode.save('make_epc.png', border=1)

2.helpers.make_epc_qr参数
| 参数名 | 参数说明 |
|---|---|
| name | 必选, 字符串类型, 收款方姓名;无默认值, 是生成EPC QR Code的核心必填项之一。 |
| iban | 必选, 字符串类型, 国际银行账户号码(IBAN);无默认值, 仅做字符串长度校验, 不验证IBAN格式合法性。 |
| amount | 必选, 整数/浮点数/decimal.Decimal类型, 转账金额(单位:欧元); - 仅支持欧元币种, 无其他货币选项; - 无默认值, 是核心必填项。 |
| text | 可选, 字符串类型, 非结构化汇款信息(附言); - 与reference互斥:二者必须提供其一, 但不能同时提供; - 默认值为None。 |
| reference | 可选, 字符串类型, 结构化汇款参考编号; - 与text互斥:二者必须提供其一, 但不能同时提供; - 仅做字符串长度校验, 不验证编号合法性; - 默认值为None。 |
| bic | 可选, 字符串类型, 银行识别码(BIC); - 仅对非欧洲经济区(EEA)国家的账户为必填项, EEA内账户可选; - 仅做字符串长度校验, 不验证BIC格式合法性; - 默认值为None。 |
| purpose | 可选, 字符串类型, SEPA(单一欧元支付区)用途代码;无默认值限制, 仅做基础长度校验。 |
| encoding | 可选, 字符串/整数类型, 编码格式; - 默认逻辑: 自动选择最优、最小的编码格式; - 手动指定值: 整数:1(UTF-8)、2(ISO 8859-1)、3(ISO 8859-2)、4(ISO 8859-4)、5(ISO 8859-5)、6(ISO 8859-7)、7(ISO 8859-10)、8(ISO 8859-15); 字符串:对应编码名称(大小写不敏感); - 默认值为None。 |
十一、带LOGO二维码
#segno并没有实现logo,需借助pillow库实现
import io
import segno
from pathlib import Path
from PIL import Image, ImageDraw
save_options = {
'scale': 10,
'border': 4,
'dark': '#dc4b14',
'finder_dark': '#efa915',
'data_dark': '#5e9730'
}
logo_scale = 0.2 # Logo占二维码的比例
logo_path = Path('D:') / 'msf' / 'Desktop' / '头像.jpg' # 确保这个路径下有图片
logo_border_width = 3 # 边框宽度(像素)
logo_border_color = (0,0,0) # 边框颜色(白色)
# 生成二维码
qrcode = segno.make('Hello word', version=4)
buff = io.BytesIO()
qrcode.save(buff, kind='png', **save_options)
buff.seek(0)
qr_img = Image.open(buff).convert('RGB')
qr_width, qr_height = qr_img.size
# 加载并处理实际的Logo图片
# 计算原始Logo的尺寸(不含边框)
original_logo_size = int(min(qr_width, qr_height) * logo_scale)
# 打开本地的头像图片
real_logo = Image.open(logo_path).convert('RGBA')
# 缩放Logo到目标尺寸
real_logo.thumbnail((original_logo_size, original_logo_size), Image.Resampling.LANCZOS)
real_logo_width, real_logo_height = real_logo.size
#创建带边框的画布(尺寸=Logo尺寸 + 2*边框宽度)
bordered_logo_size = original_logo_size + 2 * logo_border_width
bordered_logo = Image.new('RGBA', (bordered_logo_size, bordered_logo_size), (0, 0, 0, 0)) # 透明背景
draw = ImageDraw.Draw(bordered_logo)
# 绘制白色边框
draw.rectangle(
[0, 0, bordered_logo_size, bordered_logo_size],
fill=logo_border_color,
width=0
)
# 将实际Logo粘贴到边框画布的中心
logo_pos_x = logo_border_width
logo_pos_y = logo_border_width
bordered_logo.paste(real_logo, (logo_pos_x, logo_pos_y), real_logo)
# 4. 将带边框的Logo叠加到二维码中心
logo_width, logo_height = bordered_logo.size
pos_x = (qr_width - logo_width) // 2
pos_y = (qr_height - logo_height) // 2
qr_img.paste(bordered_logo, (pos_x, pos_y), bordered_logo)
# 保存并关闭资源
final_img = qr_img.convert('RGB')
final_img.save('logo_code.png')
qr_img.close()
real_logo.close()
bordered_logo.close()
final_img.close()
buff.close()

299

被折叠的 条评论
为什么被折叠?



