目录
二维码版本
微二维码、数据掩码、数据流、模式
微二维码
数据掩码
数据流
二维码模式
二维码背景
二维码参数
helpers方法
其他库制作及二维码读取:python生成和读取二维码_觅远的博客-CSDN博客
安装:pip install segno
import segno
qr = segno.make('从军玉门道,逐虏金微山。笛奏梅花曲,刀开明月环。鼓声鸣海上,兵气拥云间。愿斩单于首,长驱静铁关。')
qr.show() # 展示二维码
qr.save('001.png', border=0, light='yellow', dark='red') # 保存
二维码版本
二维码版本(0-40)与纠错能力(L,M,Q,H)
- 默认Segno使用最小的纠错级别“L”编码(微)二维码。纠错级别越高,越容易识别。
- 如果boost_error未设置为False,Segno默认尝试提高提供的纠错级别;在不改变(微)二维码版本的情况下,将错误级别设置在最小的纠错级别上。
- 参数error不区分大小写。可用纠错级别为L(最低纠错级别:可恢复7%的编码字),M(错误级别“中等”:可恢复15%的编码字),Q(错误级别“四分位值”:可恢复25%的编码字),H(最高错误级别:可恢复30%的编码字)。最高错误级别“H”不适用于微二维码,如果指定错误级别“H“,segno.make()生成的是二维码,定不会生成微二维码。
- 明确指定错误级别L,不允许提高错误级别,如果不需要此行为,则boost_error必须设置为False(默认值True)。
为内容指定版本
qr_v = segno.make('羔裘豹祛,自我人居居。岂无他人?维子之故。',version = 4) qr_v.save('qr_v4.png') qrcode = segno.make('羔裘豹祛,自我人居居。岂无他人?维子之故。',error='L', boost_error=False) print(qrcode.designator)
获取版本及纠错能力
print(qr.version) print(qr.designator)
微二维码、数据掩码、数据流、模式
微二维码
微二维码通常是数据较小的二维码,生成方法有以下两种
1、通过make方法指定micro参数,segno.make()不指定micro参数时会自动判断生成二维码或微二维码,micro值为True强制生成微二维码
segno.make('微二维码', micro=True).save('001.png')
2、make_micro方法,内容数据太大,会抛出错误segno.DataOverflowError
segno.make_micro('微二维码').save('002.png')
数据掩码
掩码是为了均衡暗模块和亮模块的比例,避免暗模块或亮模块并排或并列出现。不指定掩码,默认自动提供最佳掩码。二维码支持8种掩码方式,微二维码只支持4种。mask参数用来指定掩码。
beatle = segno.make('呵呵呵') beatle = beatle.to_pil()
qrcode = segno.make('掩码测试', mask=2) qrcode.save('mask.png') print(qrcode.mask)
数据流
二维码保存为数据流,如喜欢把所有的处理保持在 "内存中",而不是在硬盘或服务器上创建文件,可以创建一个PIL图像对象,或者使用BytesIO保存一个类似文件的对象:二维码要序列化到缓冲区,使用 kind 参数指定输出格式。
import io,segno qr = segno.make('从军玉门道,逐虏金微山。笛奏梅花曲,刀开明月环。鼓声鸣海上,兵气拥云间。愿斩单于首,长驱静铁关。') buff = io.BytesIO() qr.save(buff, kind='png', light=None)
二维码模式
数字模式:numeric,(大写)字母数字模式:alphanumeric,日文模式:kanji,中文模式:hanzi,字节模式:byte
print(segno.make('汉字', mode='hanzi').mode) print(qr.mode)
二维码背景
通过添加背景图片生成二维码,支持动图GIF格式背景图
qr = segno.make('爱你哦!', version=6, error='h')
qr.to_artistic(background='./1.gif', target='动图二维码.gif', scale=10)
通过save保存方法修改颜色生成不同背景或前景色的二维码(见下面二维码参数):彩色二维码:颜色值可以以元组(R、G、B)、网络颜色名称(如“红色”)或十六进制#RRGGBB 值(即“#085A75”)的形式提供。如果支持 alpha 透明度(即 PNG 和 SVG),则接受像 #RRGGBBAA 这样的十六进制值。
qr.save('q1.png', scale=5, dark='red', light=None, data_dark='yellow', data_light='green')
二维码参数
保存方法参数(从二维码对象segno.QRCode序列化多个输出格式,二维码与具体的输出格式无关,可以保存为png、svg、txt、eps) | |
scale | 该参数指示序列化的缩放因子。默认情况下,缩放因子为 1,这意味着暗/亮模块的大小被解释为特定输出格式中的一个单位(即,PNG 序列化方法为 1 像素,EPS 中为 1 点(1/72 英寸)) .一些序列化方法(如 PNG)仅接受整数值或将提供的缩放因子转换为整数。其他,如 SVG 和 EPS,接受浮点值并且不将其“降级”为整数。 |
border | 边距 |
dark | 前景色,None时前景透明 |
light | 背景色,None时前景透明 |
alignment_dark | 前景色对齐模式的颜色 |
alignment_light | 背景色对齐模式的颜色 |
dark_module | 某一个前景的点颜色 |
data_dark | 数据模块的前景颜色 |
data_light | 数据模块的背景颜色 |
finder_dark | 定位区暗模块的颜色 |
finder_light | 定位区亮模块的颜色 |
format_dark | 格式信息区的暗模块的颜色 |
format_light | 格式信息区的亮模块的颜色 |
quiet_zone | 静区(边框)的颜色 |
separator | 分隔区的颜色 |
timing_dark | 计时区的暗模块的颜色 |
timing_light | 计时区亮模块的颜色 |
version_dark | 版本信息区的暗模块的颜色(微二维码和低于版本7的二维码不携带任何版本信息) |
version_light | 版本信息区亮模块的颜色 |
SVG保存参数选项(支持彩色二维码的所有选项。此外,SVG 序列化程序还提供以下选项) | |
xmldecl | 布尔值(默认值:True)或省略(CLI:–no-xmldecl)XML 声明 |
svgns | 布尔值(默认值:True)或省略(CLI:–no-namespace)SVG 命名空间声明。如果SVG图形应该嵌入到HTML5上下文中,那么命名空间声明是多余的,请通过svgns=False省略它。 |
svgid | string类型(默认值:None)。svg 元素的 id属性值 |
svgclass | string类型,默认值“segno”。svg元素的class属性值,使用None或一个空字符串省略此属性。 |
lineclass | string类型(默认值“qrline”)。path元素的class属性值。使用None或空字符串省略此属性。 |
omitsize | 布尔值类型,是否使用width和height属性。 |
nl | 布尔类型,默认值为True,是否启用文档末尾的尾随换行符。要省略换行符,设置为False。 |
title | string类型,默认值None。 |
desc | string类型,默认值None。 |
unit | string类型,默认值为None。设置width/height属性的单位,不检查单位的正确性,任何非空值都用作width/height的数量单位,通常是“cm”,“mm”。omitsize=True时报错 |
encoding | string类型,默认值’utf-8’。设置XML文件的编码,如果设置为None,忽略XML文件的编码,但是XML文件的默认编码“UTF-8”被使用。如果xmldecl设置为False,不推荐encoding设置除“utf-8”外的值。 # draw_transparentint或float类型,默认值None。设置SVG的version属性,默认省略该属性。传递的任何值都会转成字符串。该值可能会对生成的路径产生影响,因为该库假定小于2的值不支持CSS3的颜色模块。推荐使用默认值。 |
unit | 二维码尺寸单位,可用mm、cm: |
helpers方法
helpers方法可生成WIFI二维码、地理坐标二维码、个人名片二维码、邮箱二维码、支付EPC二维码
from segno import helpers
helpers.make_mecard(name='张三',email='232333qq.com',phone='18799990000',city='中国').save('my_qr.png',scale=5)
helpers.make_wifi('zhangsanwifi','123456').save('wifi_qr.png',scale = 10)
helpers.make_email(to='1889099@qq.com',cc=['558@qq.com','5999@qq.com'],bcc=['0000qq.com'],subject='这是邮件的主题',body='这是邮件的正文内容').save('email_qr.png', scale=10)
helpers.make_vcard(name='猫猫', displayname='(宝宝)', email=['1513333333qq.com'], city='山沟沟', lat=123.34, lng=30.99).save('vcard.png', scale=10)
helpers.make_epc_qr(name='电子支付', iban='658777858786655125', amount=120, text='电子支付账单', bic='BKCHCNBJ').save('epc.png',scale=10)
helpers.make_geo(31.989, 121.343 ).save('geo_qr.png', scale=10)