python-segno:二维码制作

news2024/12/22 23:19:22

目录

二维码版本

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

微二维码

数据掩码

数据流

二维码模式

二维码背景

二维码参数

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省略它。
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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/653181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131244269 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

经典30个嵌入式面试问题

经典30个嵌入式面试问题 嵌入式系统的面试经典问题有很多,以下是其中的30个常见问题: 1. 什么是嵌入式系统? 2. 嵌入式系统和普通计算机系统有什么区别? 3. 嵌入式系统的主要应用领域有哪些? 4. 嵌入式系统的设计…

接口测试工具之postman

概念 接口测试是什么? 百度百科给出的解释是: 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间…

构造函数初始化列表的问题

构造函数初始化列表的问题 无法按照表达式中的算符来修改值原因基本原则由此引申的问题使用初始化列表对类成员初始化在构造函数中赋值对类成员初始化 针对构造函数传参,使用引用的情况使用初始化列表对类成员初始化在构造函数中赋值对类成员初始化 将属性也使用引用总结 无法按…

STM32开发——看门狗

目录 1.独立看门狗 1.1需求 1.2CubeMX设置 1.3函数代码 2.窗口看门狗 2.1需求 ​2.2WWDG配置: 2.3函数代码 3.独立看门狗和窗口看门狗的异同点 1.独立看门狗 监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。 独立看门狗本质 本…

6、DuiLib控件消息响应处理

文章目录 1、DuiLib控件消息响应处理2、基本的消息响应处理 Notify3、仿 MFC 形式消息响应 DUI_DECLARE_MESSAGE_MAP4、事件委托 MakeDelegate5、消息捕获&#xff08;拦截&#xff09;原生消息 HandleMessage 1、DuiLib控件消息响应处理 <?xml version"1.0" en…

软件测试基础教程学习3

文章目录 软件质量与测试3.1 软件质量问题的原因3.2 对软件质量特性的理解3.3 基于软件质量特性的测试3.4 软件能力成熟度模型&#xff08;CMM&#xff09; 软件质量与测试 3.1 软件质量问题的原因 软件质量问题的原因有以下几种&#xff1a; 软件本身的特点和目前普遍采用的…

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(五):芯片型号

前言 随着汽车四化的推进,可以说汽车仪表也变成越来越智能化的一个ECU部件了。市面上的车型很多,油车发展了很多年,都有仪表,电车也发展起来了,车型也非常丰富,也都有仪表。仪表现在是作为多屏中一个屏存在的,现在车上最多的就是屏了,最大的要算中控屏了,有的还有空调…

【基础】MQTT -- MQTT 协议详解

【基础】MQTT -- MQTT协议详解 与 Broker 建立连接CONNECT 数据包CONNACK 数据包 断开连接DISCONNECT 数据包 订阅与发布PUBLISH 数据包SUBSCRIBE 数据包SUBACK 数据包UNSUBSCRIBE 数据包UNSUBACK 数据包 本文内容针对 MQTT 3.1.1 版本&#xff0c;从连接、发布与订阅等方面对协…

OpenCV做个熊猫表情

有的时候很想把一些有意思的图中的人脸做成熊猫表情&#xff0c;但是由于不太会ps&#xff0c;只能无奈放弃&#xff0c;so sad... 正好最近想了解下opencv的使用&#xff0c;那就先试试做个简单的熊猫表情生成器把~~ 思路就是&#xff0c;工具给两个参数&#xff0c;一个是人…

最小系统板STM32F103C8T6烧录程序指南

STM32F103C8T6烧录程序 【购买链接】&#xff1a;STM32F103C8T6最小系统板 方法一&#xff1a;使用SWD模式烧录 此时BOOT0 0&#xff0c;BOOT1 X&#xff08;任意&#xff09;&#xff0c;跳线帽接法如下图所示 接好后&#xff0c;若手边有STLINK的话&#xff0c;可以使用…

DAY25:二叉树(十五)修剪二叉搜索树+有序数组转换为二叉搜索树+二叉搜索树转化为累加树

文章目录 669.修剪二叉搜索树思路错误代码示例最开始的写法debug测试逻辑错误&#xff1a;需要两次递归的原因内存操作报错&#xff1a;操作了已经被删除的内存的指针&#xff08;力扣平台delete操作的问题&#xff0c;放IDE里就好了&#xff09;打日志debug示例 力扣平台delet…

高并发之限流-RateLimiter

背景 限流是保护高并发系统的三把利器之一&#xff0c;另外两个是缓存和降级。限流在很多场景中用来限制并发和请求量&#xff0c;比如说秒杀抢购&#xff0c;保护自身系统和下游系统不被巨型流量冲垮等。 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进…

华为OD机试之 ABR 车路协同场景(Java源码)

ABR 车路协同场景 题目描述 数轴有两个点的序列 A{A1&#xff0c; A2, …, Am}和 B{B1, B2, ..., Bn}&#xff0c; Ai 和 Bj 均为正整数&#xff0c; A、 B 已经从小到大排好序&#xff0c; A、 B 均肯定不为空&#xff0c; 给定一个距离 R&#xff08;正整数&#xff09;&a…

一文详解!Selenium浏览器自动化测试框架

目录 前言&#xff1a; selenium简介 介绍 功能 优势 基本使用 获取单节点 获取多节点 节点交互 动作链 执行JavaScript代码 获取节点信息 切换frame 延时等待 前进和后退 cookies 选项卡管理 异常处理 选项卡切换 无头浏览器 前言&#xff1a; Selenium是…

双功能螯合剂:NOTA-C6-amine,NOTA-C6-氨基,含有大环配体NOTA和氨基

文章关键词&#xff1a;双功能螯合剂&#xff0c;大环化合物 【产品描述】 西安凯新生物科技有限公司供应的​NOTA-C6-amine中含有大环配体NOTA和氨基&#xff0c;其中氨基与羧酸、活化的 NHS 酯、羰基&#xff08;酮、醛&#xff09;等反应。NOTA及其衍生物是新型双功能整合剂…

【Android】移动端设备介绍(工业手持机)

系列文章 【Android】移动端设备介绍&#xff08;工业手持机&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/130604517 【Android】开发”打地鼠“小游戏 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129…

华为OD机试之检查是否存在满足条件的数字组合(Java源码)

检查是否存在满足条件的数字组合 题目描述 给定一个正整数数组&#xff0c;检查数组中是否存在满足规则的数字组合 规则&#xff1a;A B 2C 输入描述 第一行输出数组的元素个数。 接下来一行输出所有数组元素&#xff0c;用空格隔开。 输出描述 如果存在满足要求的数…

C++入门前必看,超详细

目录 前言 一.C的关键字 二.命名空间 2.1命名空间定义 2.2命名空间的使用 三.C的输入及输出 四.缺省参数 4.1概念 4.2缺省参数分类 4.3缺省参数的注意点 五.引用 5.1 概念 5.2引用的特性 六.内联函数 6.1概念 6.2内联函数的特性 七.auto 7.1auto概念 7.2auto的…

【JAVA集合篇】ArrayList源码详解

文章目录 前言继承体系源码解析属性ArrayList(int initialCapacity)构造方法 ArrayList()构造方法ArrayList 构造方法add(E e)方法add(int index, E element)方法addAll 方法get(int index)方法remove(int index)方法remove(Object o)方法retainAll方法removeAll 总结 前言 Ar…