[python] Python二维码生成器qrcode库入门
Python二维码生成器qrcode库入门
qrcode是二维码生成的Python开源库,官方地址为python-qrcode。所有代码见:Python-Study-Notes。
文章目录
1 简介
qrcode依赖于pillow,安装代码如下:
pip install qrcode[pil]
什么是二维码QRCode?
快速响应码Quick Response Code(QRCode)是一种二维象形码,具有快速的可读性和较大的存储容量。 该码由在白色背景上以方形图案排列的黑色模块组成(可以更改颜色)。 编码的信息可以由任何类型的数据组成(例如,二进制、字母数字或汉字符号)。二维码能存储大量的数据,将所有数据存储为方形网格中的一系列像素。二维码详细的细节和原理见二维码的生成细节和原理。
2 用法
2.1 基础使用
2.1.1 命令行使用
从命令行,使用已安装的qr脚本:
! qr "hello world!" > test1.png
然后我们可以在当前路径获得一个名为test1.png的二维码文件,图像宽高为290。图片显示代码如下:
from PIL import Image
from IPython.display import display
img = Image.open('test1.png', 'r')
print("img size is {}".format(img.size))
# 显示图片
display(img)
img size is (290, 290)

2.1.2 Python接口
在 Python 中,使用make快捷功能,也可以输出二维码图像,代码如下:
import qrcode
# 构建二维码
data = 'hello world!'
img = qrcode.make(data)
# 显示图片格式,为qrcode.image.pil.PilImage
print(type(img))
# 保存图片
img.save("test2.png")
<class 'qrcode.image.pil.PilImage'>
2.1.3 二维码解析
如果想查看生成的二维码信息,可以用手机扫描二维码,或者使用草料二维码解析器在线解析图片。解析结果如下图所示:

2.2 高级使用
2.2.1 二维码自定义
我们还可以通过在之前使用该QRCode函数创建的qr对象中添加一些属性来自定义QR 码的设计和结构。基本参数如下:
- version:一个1 到40之间的整数,用于控制 QR 码的大小(最小的版本1是一个21x21矩阵)。默认为None,表示代码自动确认该参数。
- error_correction:用于二维码的纠错。qrcode 包中提供了以下四个常量:
- ERROR_CORRECT_L 大约可以纠正 7% 或更少的错误。
- ERROR_CORRECT_M (默认)大约 15% 或更少的错误可以被纠正。
- ERROR_CORRECT_Q 大约 25% 或更少的错误可以被纠正。
- ERROR_CORRECT_H 大约可以纠正 30% 或更少的错误。
- box_size:控制二维码的每个“盒子”有多少像素,默认为10。
- border:控制边框应该有多少个框厚(默认为 4,这是根据规范的最小值)。
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
data = "hello world!"
qr.add_data(data)
qr.make(fit=True)
# fill_color和back_color分别控制前景颜色和背景颜色,支持输入RGB色,注意颜色更改可能会导致二维码扫描识别失败
img = qr.make_image(fill_color=( 213 , 143 , 1 ), back_color="lightblue")
display(img)

2.2.2 二维码输出
我们还可以将二维码可以导出为SVG图片。
import qrcode
import qrcode.image.svg
method = 'fragment'
if method == 'basic':
# Simple factory, just a set of rects.
# 简单模式
factory = qrcode.image.svg.SvgImage
elif method == 'fragment':
# Fragment factory (also just a set of rects)
# 碎片模式
factory = qrcode.image.svg.SvgFragmentImage
else:
# Combined path factory, fixes white space that may occur when zooming
# 组合模式,修复缩放时可能出现的空白
factory = qrcode.image.svg.SvgPathImage
img = qrcode.make('hello world!', image_factory=factory)
# 保存图片
img.save("test3.svg")
2.2.3 二维码图像样式
要将样式应用于QRCode,请使用StyledPilImage。这需要一个可选的module_drawers参数来控制二维码的形状,一个可选的color_mask参数来改变二维码的颜色,还有一个可选的embeded_image_path参数来嵌入图像。这些二维码并不能保证对所有的二维码识别器都有效,所以做一些实验并将纠错error_correction设置为高(尤其是嵌入图像时)。
python-qrcode提供的二维码的形状列表如下:

python-qrcode提供的二维码的颜色列表如下:

具体使用代码如下:
import qrcode
from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.moduledrawers import RoundedModuleDrawer,SquareModuleDrawer
from qrcode.image.styles.colormasks import RadialGradiantColorMask,SquareGradiantColorMask
# 纠错设置为高
qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_H)
# 如果想扫描二维码后跳转到网页,需要添加https://
qr.add_data('https://www.baidu.com')
# 修改二维码形状
img_1 = qr.make_image(image_factory=StyledPilImage, module_drawer=RoundedModuleDrawer())
# 修改二维码颜色
img_2 = qr.make_image(image_factory=StyledPilImage, color_mask=SquareGradiantColorMask())
# 嵌入图像
img_3 = qr.make_image(image_factory=StyledPilImage, embeded_image_path="lena.jpg")
# 嵌入图像
img_4 = qr.make_image(image_factory=StyledPilImage, module_drawer=SquareModuleDrawer(), color_mask=RadialGradiantColorMask(), embeded_image_path="lena.jpg")
img_1

img_2

img_3

img_4

3 参考
[python] Python二维码生成器qrcode库入门的更多相关文章
- 标星7000+,这个 Python 艺术二维码生成器厉害了!
微信二维码,相信大家也并不陌生,为了生成美观的二维码,许多用户都会利用一些二维码生成工具. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手 ...
- vue的二维码生成器
vue项目开发的时候经常会遇到需要将一个网址链接转化为二维码的需求,方便用户扫描观看,以下就是我在寻找vue二维码生成器的时候踩过的坑. 不能用的二维码生成器 qrcode node-qr ...
- 【PYTHON】二维码生成
二维码是什么? 二维码从一维码扩展而来,增加另一维具有可读性的条码,用黑白矩形图形表示二进制数据,被设备扫描后获取其中包含的信息,二维码的长度.宽度均记载着数据,二维码具有定位点和容错机制,即便没有辨 ...
- 从Scratch到Python——Python生成二维码
# Python利用pyqrcode模块生成二维码 import pyqrcode import sys number = pyqrcode.create('从Scratch到Python--Pyth ...
- Python 实现二维码生成和识别
今天突然想给自己自己做个头像,然后还是二维码的形式,这样只要扫一扫就可以访问我的主页.然后就开始自己的苦逼之路... 其实实现二维码java,c#,C++等都可以实现:由于自己正在学python,所以 ...
- 使用 Python 生成二维码
在“一带一路”国际合作高峰论坛举行期间, 20 国青年投票选出中国的“新四大发明”:高铁.扫码支付.共享单车和网购.其中扫码支付指手机通过扫描二维码跳转到支付页面,再进行付款.这种新的支付方式,造就二 ...
- 有关python下二维码识别用法及识别率对比分析
最近项目中用到二维码图片识别,在python下二维码识别,目前主要有三个模块:zbar .zbarlight.zxing. 1.三个模块的用法: #-*-coding=utf-8-*- import ...
- 用python生成二维码
Python生成二维码,可以使用qrcode模块, github地址 我是搬运工 首先安装, 因为打算生成好再展示出来,所以用到Pillow模块 pip install qrcode pip inst ...
- Javascript 二维码生成库:QRCode
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- MYSQL创建分区时候报错
第一种:ERROR 1064 (42000): Partitioning can not be used stand-alone in query near 不能单独创建分区.创建分区时要创建分区表 ...
- .net lambda表达式合并
事情的起因是公司一个小伙子问了我个问题 "海哥,来帮我看下这段代码怎么不行" Func<Report,bool> nameFilter = x=>x.Name = ...
- C# Linq 查询汇总
分组取值.求和.计数 1 var resultlist = orderllist.GroupBy(oo => new { oo.Deptname, oo.Userid, oo.Username ...
- wpf 手指触摸图片放大缩小 设置放大缩小值
xaml代码: <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/w ...
- 如何kill一条TCP连接?
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 如果你的程序写得有毛病,打开了很多TCP连接,但一直没有关闭,即常见的连接泄露场景,你可能想要在排查问题的过程中, ...
- $_SERVER["REQUEST_URI"],在 PHP 众多预定义服务器变量中,$_SERVER["REQUEST_URI"] 算是经常用到的,但是这个变量只有 apache 才支持
例如访问:http://localhost/index.php?app=lunbo获取到的$_SERVER["REQUEST_URI"]为"/index.php?app= ...
- VB6查看桌面分辨率和工作区大小 2022.08.22 name.vt
VB6查看桌面分辨率和工作区大小 2022.08.22 name.vt Form1 内代码如下: ' 2022年8月22日 15时15分 ' 作者:name.vt Private Sub cmdCle ...
- JS逆向实战4--cookie——__jsl_clearance_s 生成
分析 网站返回状态码521,从浏览器抓包来看,浏览器一共对此地址请求了三次(中间是设置cookie的过程): 第一次请求:网站返回的响应状态码为 521,响应返回的为经过 混淆的 JS 代码:但是这些 ...
- 畅联云平台(www.24hlink.cn)支持的用传列表
无锡蓝天 沈阳君丰 无锡富贝 海康威视 海湾 苏州思迪 法安通 北大青鸟 金盾 依爱 威隆 1)几乎集齐了市场上常见的用户信息传输装置的类型,如果没接入的,我们也能接入哦. 2)欢迎咨询我们关于用传的 ...
- K8s 生产最佳实践-限制 NameSpace 资源用量
前言 想象一下这个场景:多个系统运行在同一套 K8s 集群上,有重要系统,也有不太重要的系统.但是某一天,某个不重要的系统突然占用了该 K8s 集群的所有资源,导致该集群上的其他系统的正常运行受到影响 ...