当前位置: 首页 > news >正文

python 系列 06 -生成及解析二维码

0 说明

二维码不止一种,本文介绍最常见的QR二维码。由于不能发二维码截图,所以所有的执行结果都隐去了。完整版本可以移步到此查看:https://vblogs.cn/momo1938/article?id=0407576070659864

1 安装包

python 可以使用qrcode来生成二维码,python 安装时多半以内置了这个包,没有的话可以先安装以下这个包:

pip install qrcode

2 生成二维码

2.1 简单示例

简单示例,生成包含csdn地址的二维码:

import qrcode#添加二维码信息
img = qrcode.make('https://baidu.com')#保存二维码图片
img.save('01.png')

生成的图片示例,扫描即可打开百度

2.2 二维码的主要参数

2.2.1 Version:版本,取值范围1-40。

版本1大小为21X21矩阵,版本40大小177x177矩阵。版本越大,容纳的信息量越大,版本1容纳的字符数约十几个,版本40理论上可容纳7000多个字符,大约1800个汉字。

import qrcode
img = qrcode.make('https://baidu.com',version=40)
img.save('02.png')

版本为1和40二维码对比:

2.2.2 error_correction 二维码纠错

此参数控制用于二维码的纠错。有四个级别,如下所示:

ERROR_CORRECT_L: 7%

ERROR_CORRECT_M:15%

ERROR_CORRECT_Q:25%

ERROR_CORRECT_H:30%

什么是纠错? 即使编码变脏或破损,也可自动恢复数据。上面的四个级别表示当二维码的损毁部分不大于这个百分比时,二维码依旧可以被正确识别:

示例,加入纠错:

import qrcodeimg = qrcode.make('https://csdn.net',version=1,error_correction=qrcode.constants.ERROR_CORRECT_L,
)
img.save('03.png')

然后将生成的二维码擦出掉右下角一部分,依旧可以被识别。

2.2.3 box_size 控制框内像素数

此参数在版本号相同的情况下,像素数越高,二维码尺寸越大,但二维码尺寸并不完全由此参数决定。

img = qrcode.make('https://baidu.com',version=1,error_correction=qrcode.constants.ERROR_CORRECT_L,box_size=15)
img.save('04.png')

在版本号相同的情况下,box_size = 15 和 50的对比:

2.2.4 border:控制边框的粗细。默认边框为 4 像素。

此处的边框指的的外围空白区域。

import qrcode
img = qrcode.make('https://baidu.com',version=1,box_size=15,border=8
)
img.save('05.png')

边框为2 和 边框为8 的对比:

2.2.5 顺便说一下二维码的尺寸

二维码的尺寸与这几个参数有关:version ,border ,box_size,具体计算公式如下:
qr_size = (21 + (version - 1) * 4 + border * 2) * box_size

2.2.6 其它说明

二维码生成时容错级别当然是越高越好,但容错级别越高,所能容纳的数据量就小,也会增大二维码的尺寸。这个需要自己根据情况取舍。

2.2 生成彩色二维码

import qrcodeqr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_H,box_size=10,border=4,
)qr.add_data('https://baidu.com')
#填充色和背景色
img = qr.make_image(fill_color='palegreen',back_color='lightgoldenrodyellow')
img.save('color.png')

其中的填充色和背景色必须时web支持的颜色值。否则会报错,生成的二维码:

web颜色值是W3C定义的颜色标准,一共140种,感兴趣可自行搜索了解,这里不再一一列举。

2.3 其它二维码

由于需要借助其它的库,这里不再详细解释,给出示例和注释,需要时可直接拷贝代码。

2.3.1 带背景图片的二维码

使用myqr库pip install myqr

from MyQR import myqrmyqr.run(words="https://baidu.com/",version=1,picture="bg.jpg",colorized=True,save_name="bg.png",
)

生成结果:

也可将背景图替换为gif.生成动态二维码。

2.3.2 生成内置logo的二维码

# coding: utf-8import qrcode
from PIL import Image # 依赖的库是pillow,常用的图片处理库qr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_H,box_size=10,border=4,
)qr.add_data('https://badiu.com')
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img = img.convert("RGBA")#logo
logo = Image.open("logo.png")# 获取二维码的尺寸
img_w, img_h = img.sizescale = 6
size_w = int(img_w / scale)
size_h = int(img_h / scale)logo_w, logo_h = logo.size
if logo_w > size_w:logo_w = size_w
if logo_h > size_h:logo_h = size_h
# 设置logo的尺寸和位置
logo = logo.resize((logo_w, logo_h), Image.ANTIALIAS)
w = int((img_w - logo_w) / 2)
h = int((img_h - logo_h) / 2)
img.paste(logo, (w, h), logo)
img.save('11.png')

生成结果:

3 读取或识别二维码

使用opencv 库来识别二维码:

pip install opencv-python

读取示例:

import cv2qr_file = "01.png"
qr_image = cv2.imread(qr_file)
qr_detector = cv2.QRCodeDetector()
data, bbox, straight_qrcode = qr_detector.detectAndDecode(qr_image)print(data)

控制台输出:

$ python 06-4.py                                                       
https://baidu.com

相关文章:

python 系列 06 -生成及解析二维码

0 说明 二维码不止一种,本文介绍最常见的QR二维码。由于不能发二维码截图,所以所有的执行结果都隐去了。完整版本可以移步到此查看:https://vblogs.cn/momo1938/article?id0407576070659864 1 安装包 python 可以使用qrcode来生成二维码&…...

2023第二届中国绿色钢铁国际峰会

会议背景 钢铁是当今世界上最常用的金属,普遍应用于世界各国基础设施建设与机械、汽车、飞机、船舶、家电等产品的生产制造中。但是,随着各国政府与行业净零排放目标的确立,钢铁行业的减排降碳也成为了关注焦点。据世界钢铁协会称&#xff0c…...

java 高考志愿填报系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 高考志愿填报系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0…...

机器学习 vs 深度学习:了解两者的异同

在人工智能领域中,机器学习和深度学习是两个重要的概念。尽管它们都可以用于处理复杂的数据和任务,但它们在其基本原理、算法和应用方面有着显著的不同之处。在本文中,我们将详细介绍机器学习和深度学习的定义、原理、算法和应用,…...

流行的 DAW编曲软件FL Studio 21 有什么新功能?

FL Studio 21 对流行的 DAW 和音乐制作软件进行了多项更新。最重要的变化包括:更快、更精确的音频包络和带有自动交叉推子的增益控制;一个能够标记、制作自定义颜色的标签和访问在线内容的新浏览器,以及一个带有可视化和擦除功能的内嵌音频播…...

【Java】抽象类和接口

抽象类和接口抽象类抽象类的概念抽象类语法抽象类的注意事项抽象类的作用接口接口的概念语法规则接口使用接口注意实现多个接口接口间的继承接口使用实例给对象数组排序Clonable 接口和深拷贝浅拷贝深拷贝抽象类和接口的区别抽象类 抽象类的概念 在面向对象的概念中&#xff…...

Lora:Low-Rank Adapation of Large Language models

Lora:Low-Rank Adapation of Large Language modelsIntroductionMethodExperiment代码Introduction 这篇论文最初与21.06上传与arXiv,作者指出在当时,NLP的一个重要范式是先训练一个通用领域的模型然后在通过微调适应不同的领域与数据&#…...

洛谷-P8466 [Aya Round 1 A] 幻想乡扑克游戏

题目:P8466 [Aya Round 1 A] 幻想乡扑克游戏 题目描述: 题目描述 斗地主是一种使用 �A 到 �K 加上大小王的共 5454 张扑克牌来进行的游戏,其中大小王各一张,其它数码牌各四张。在斗地主中,牌的…...

HBase性能优化方法总结

1. 表的设计 1.1 Pre-Creating Regions 默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。一种可以加快批量写入速度的方…...

Linux基础内容(16)—— 文件系统

Linux基础内容(15)—— 缓冲区https://blog.csdn.net/m0_63488627/article/details/129824563?spm1001.2014.3001.5501 目录 1.基础知识 2.磁盘的存储原理 1.物理结构 2.存储结构 3.逻辑结构 1.基础知识 之前介绍的全是进程打开的文件是如何执行…...

Vue自定义事件

自定义事件 ​ 通以上代码不难发现,数据项在Vue的实例中, 但删除操作要在组件中完成, 那么组件如何才能删除Vue实例中的数据呢?此时就涉及到参数传递与事件分发了, Vue为我们提供了自定义事件的功能很好的帮助我们解决了这个问题…...

Java SE 基础 (6) 第一个Java程序

开发环境已经搭建完毕,可以开发我们第一个Java程序了。 Java程序开发三步骤:编写、编译、运行。 编写Java源程序 public class HelloWord {public static void main(String[] args) {System.out.println("HelloWord!");} } 第一个 HelloWo…...

P1004 [NOIP2000 提高组] 方格取数

题目描述 设有 ��NN 的方格图 (�≤9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 00。如下图所示(见样例): 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0…...

Leetcode.1024 视频拼接

题目链接 Leetcode.1024 视频拼接 Rating : 1746 题目描述 你将会获得一系列视频片段,这些片段来自于一项持续时长为 time秒的体育赛事。这些片段可能有所重叠,也可能长度不一。 使用数组 clips描述所有的视频片段,其中 clips[i…...

20个华为路由器常用的Python脚本,网工写自动化脚本时候可以参考!

你好,这里是网络技术联盟站。 昨天给大家介绍了10个华为交换机的Python脚本: 10个华为华为交换机常用的Python脚本,网络工程师收藏! 大家反响不错,后期我会陆续出一下思科、H3C、锐捷等厂商的脚本,前期会…...

【kubernetes云原生】k8s资源管理命令与Namespace使用详解

目录 一、前言 二、k8s概述 三、k8s常用操作管理命令 3.1 kubectl 命令用法 3.2 常用控制台管理命令演示 3.2.1 获取全部节点信息 3.2.2 获取当前集群下全部pod 3.2.3 查看某个pod信息 3.2.4 获取当前集群下的所有namespace信息 3.2.5 查看当前集群下已创建的资源 3…...

String源码深度刨析

前言 我们将从源码角度深度分析特点,来提升对他们的了解以及设计。 String、StringBuilder、StringBuffer的常见面试题及四大区别可以参考:String、StringBuilder、StringBuffer的四大区别解析 String public final class Stringimplements java.io.Se…...

FreeRTOS - 消息队列

一.消息队列的概念及应用消息队列(queue):可以在任务与任务间、中断和任务间传递消息,实现任务接收来自其他任务或中断的不固定的消息1.1任务需求1、使用消息队列检测串口输入2、通过串口发送字符串openled1,openled2&…...

怎样正确做 Web 应用的压力测试?

环境 首先环境是非常重要的,需要尽可能跟生产环境靠近。 比方说,使用同样的nginx版本,php的话需要启用fpm,zend-optimizer等等,参数配置也最好跟生产环境保持一致。 当然,php的版本更加需要保持一致&#x…...

php mysql大学生求职招聘资源信息网zkfdzkf67a8

1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和验证码,然后对登录进来的用户判断身份信息,判断是管理员用户还是普通用户。 2.系统用户管理:不管是…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

AD学习(3)

1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分&#xff1a; &#xff08;1&#xff09;PCB焊盘&#xff1a;表层的铜 &#xff0c;top层的铜 &#xff08;2&#xff09;管脚序号&#xff1a;用来关联原理图中的管脚的序号&#xff0c;原理图的序号需要和PCB封装一一…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

深入解析 ReentrantLock:原理、公平锁与非公平锁的较量

ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...