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格式专属参数(仅对应格式支持)

格式参数名参数说明
SVGxmldecl可选, 布尔值, 是否包含 XML 头声明;默认True
SVGsvgns可选, 布尔值, 是否声明 SVG 命名空间;默认True(嵌入HTML5可设False)
SVGtitle可选, 字符串, SVG 文档的标题;默认None
SVGdesc可选, 字符串, SVG 文档的描述;默认None
SVGsvgid可选, 字符串, SVG 元素的ID;默认None(无ID)
SVGsvgclass可选, 字符串, SVG 元素的CSS类;默认qrcode
SVGlineclass可选, 字符串, 绘制深色模块的路径CSS类;默认qrcode-line
SVGomitsize可选, 布尔值, 是否省略宽高属性(自动添加viewBox);默认False
SVGunit可选, 字符串, 坐标单位(如px/cm/mm/in等);默认None(用户空间)
SVGencoding可选, 字符串, XML 文档编码;默认utf-8
SVGsvgversion可选, 浮点数, SVG 版本号;默认None(无版本属性)
SVGcompresslevel可选, 整数(仅svgz格式), 压缩级别(0-9);默认9
SVGdraw_transparent可选, 布尔值, 是否添加透明路径;默认False
SVGnl可选, 布尔值, 是否添加末尾换行;默认True
PNGcompresslevel可选, 整数, IDAT 数据块压缩级别(0-9);默认9
PNGdpi可选, 数值, 图片 DPI 值(自动转换为米单位);默认None
EPS无额外专属参数-
PDFcompresslevel可选, 整数, 压缩级别(0-9);默认9
TXT无scale支持, 仅dark/lightdark默认1, light默认0
ANSI仅支持border无其他专属参数
PBMplain可选, 布尔值, 是否使用 P1 格式(过时);默认False(P4格式)
PAM无额外专属参数-
PPM无额外专属参数-
LaTeXurl可选, 字符串, 二维码关联的 URL(需 LaTeX 的hyperref包);默认None
XBMname可选, 字符串, 变量名;默认img
XPMname可选, 字符串, 变量名;默认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
email可选, 字符串/字符串可迭代对象(列表/元组)/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。
email可选, 字符串/字符串可迭代对象(列表/元组等)/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);无默认值, 用于通讯录中展示的友好名称。
email可选, 字符串/字符串可迭代对象(列表/元组等)/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()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

局外人LZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值