python-segno:二维码制作

目录

二维码版本

微二维码、数据掩码、数据流、模式

微二维码

数据掩码

数据流

二维码模式

二维码背景

二维码参数

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('呵呵呵')
img = beatle.to_pil(scale = 10,dark='#FF7D92')
img.save('pil.png')
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省略它。
svgidstring类型(默认值:None)。svg 元素的 id属性值
svgclassstring类型,默认值“segno”。svg元素的class属性值,使用None或一个空字符串省略此属性。
lineclassstring类型(默认值“qrline”)。path元素的class属性值。使用None或空字符串省略此属性。
omitsize布尔值类型,是否使用width和height属性。
nl布尔类型,默认值为True,是否启用文档末尾的尾随换行符。要省略换行符,设置为False。
titlestring类型,默认值None。
descstring类型,默认值None。
unitstring类型,默认值为None。设置width/height属性的单位,不检查单位的正确性,任何非空值都用作width/height的数量单位,通常是“cm”,“mm”。omitsize=True时报错
encodingstring类型,默认值’utf-8’。设置XML文件的编码,如果设置为None,忽略XML文件的编码,但是XML文件的默认编码“UTF-8”被使用。如果xmldecl设置为False,不推荐encoding设置除“utf-8”外的值。
# draw_transparentint或float类型,默认值None。设置SVG的version属性,默认省略该属性。传递的任何值都会转成字符串。该值可能会对生成的路径产生影响,因为该库假定小于2的值不支持CSS3的颜色模块。推荐使用默认值。
unit二维码尺寸单位,可用mm、cm:
segno.make('good luck').save('svg_qr.svg', title='测试svg二维码', scale=5, unit='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)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值