使用 Python 生成二维码
在“一带一路”国际合作高峰论坛举行期间, 20 国青年投票选出中国的“新四大发明”:高铁、扫码支付、共享单车和网购。其中扫码支付指手机通过扫描二维码跳转到支付页面,再进行付款。这种新的支付方式,造就二维码满天飞的现象。那么让我们来扒一扒如何使用 Python 来生成二维码图片。
1 二维码
二维码(2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。它能将数字、英文字母、汉字、日文字母、特殊符号(如空格,%,/ 等)、二进制等信息记录到一个正方形的图片中。
因此,在转换的过程中,离不开编码压缩方式。在许多种类的二维条码中,常用的码制有:Data Matrix, Maxi Code, Aztec, QR Code, Vericode, PDF417, Ultracode, Code 49, Code 16K等。
二维码在现实生活中的应用越来与普遍,归于功于 QR code 码制的流行。我们常说的二维码就是它。所以,二维码又被称为 QR code。
QR code 是一种矩阵式二维条码(又称棋盘式二维条码)。它是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列组合确定了矩阵式二维条码所代表的意义。
2 二维码结构
我们的目的是要使用 Python 生成 QR 码,那我们需要先了解二维码(QR 码)的结构。根据标准(ISO/IEC 18004),我们可以了解到 QR 码结构如下:
图片来源网络
1) 功能图形
功能图形是不参与编码数据的区域。它包含空白区、位置探测图形、位置探测图形分隔符、定位图形、校正图形五大模块。
空白区
空白区顾名思义就是要留空白。因此,这里不能有任何图样或标记。这样才能保证 QR 能被识别。
位置探测图形
这个有点类似中文的“回”字。在 QR 码中有个这样的标识,它分别的左上、右上和左下角。作用是协助扫描软件定位 QR 码并转换坐标系。我们在扫描二维码的时候,不管是竖着扫、横着扫、斜着扫都能识别出内容,主要是它的功劳。
位置探测图形分隔符
主要作用是区分功能图形和编码区域。
定位图形
它由黑白间隔的各自各自组成的线条。主要用于指示标识密度和确定坐标系。原因是 QR 码一种有 40 个版本,也就是说有 40 种尺寸。每种二维码的尺寸越大,扫描的距离就越远。
校正图形
只有 Version 2 及以上的QR码有校正标识。校正标识用于进一步校正坐标系。
2) 编码区域
编码区域是数据进行编码存储的区域。它由格式信息、版本信息、数据和纠错码字三部分构成。
格式信息
所有尺寸的二维码都有该信息。它存放一些格式化数据的信息,例如容错级别、数据掩码,和额外的自身 BCH 容错码。
版本信息
版本信息是规定二维码的规格。前面讲到 QR 码一共有 40 种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40),每一版本符号比前一版本 每边增加4个模块。
数据和纠错码
主要是存储实际数据以及用于纠错码字。
3 二维码的绘制过程
二维码已经是有一套国际标准,绘制二维码过程的严格按照标准来执行。这个过程是比较复杂,我自己也是看了大概,然后总结出大致绘制过程。如果你想深入了解绘制细节,可以阅读标准。
二维码的绘制大概过程如下:
1)在二维码的左上角、左下角、右上角绘制位置探测图形。位置探测图形一定是一个 7x7 的矩阵。
2)绘制校正图形。校正图形一定是一个 5x5 的矩阵。
3)绘制两条连接三个位置探测图形的定位图形。
4)在上述图片的基础上,继续绘制格式信息。
5)接着绘制版本信息。
6)填充数据码和纠错码到二维码图中。
7)最后是绘制蒙版图案。因为按照上述方式填充内容,可能会出现大面积的空白或黑块的情况,导致扫描识别会十分困难。所以需要对整个图像与蒙版进行蒙版操作(Masking),蒙版操作即为异或 XOR 操作。在这一步,我们可以将数据排列成各种图片。
4 二维码的生成
我们既然已经了解二维码原理,那么可以利用 Python 生成二维码。然而网络上高人比比皆是。已经有大神编写了 Python 生成二维码的第三方库,所以我们不需要重复造轮子, 使用现成的库即可。
我就推荐两个库:qrcode 和 python-qrcode。
qrcode
qrcode 运行在 Python 3 版本上,它可以玩出很多花样。例如能生成以下三种二维码图片:普通二维码、带图片的艺术二维码(黑白与彩色)、动态二维码(黑白与彩色)。它比较适合直接用于生成二维码图片的场景。
安装 qrcode 库可以使用 pip 方式。但是该库依赖 pillow、numpy 和 imageio。因此,我们需要先安装依赖库,再安装 qrcode。最后的安装命令如下:
# 逐一安装
pip install pillow
pip install numpy
pip install imageio
pip install myqr
该库生成带图片的艺术二维码算是一大亮点,具体用法如下:
myqr https://github.com -p github.jpg -c
上述命令作用是将 github 主页写到彩色二维码中。
该库还支持生成 gif 的彩色二维码图片,具体用法如下:
myqr https://github.com -p github.gif -c -con 1.5 -bri 1.6
效果图如下:
最后补上该库的 Github 地址:https://github.com/sylnsfar/qrcode
python-qrcode
python-qrcode 相比 qrcode 要稍微逊色一点。不过它也有自己的特色。它支持生成矢量图,而且比较适合在代码中生成二维码的场景。
安装 python-qrcode 同样建议使用 pip 方式,安装命令如下:
pip install qrcode
在 Python 代码中,最简单的用法是这样。
import qrcode
img = qrcode.make('https://github.com')
它也支持自定义二维码的信息,具体用法如下:
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data('https://github.com')
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
如果你想深入了解该库,可以到 Github 仓库阅读相关的文档。
Github 地址是:https://github.com/lincolnloop/python-qrcode
使用 Python 生成二维码的更多相关文章
- 从Scratch到Python——Python生成二维码
# Python利用pyqrcode模块生成二维码 import pyqrcode import sys number = pyqrcode.create('从Scratch到Python--Pyth ...
- 用python生成二维码
Python生成二维码,可以使用qrcode模块, github地址 我是搬运工 首先安装, 因为打算生成好再展示出来,所以用到Pillow模块 pip install qrcode pip inst ...
- python生成二维码
1.python-qrcode是个用来生成二维码图片的第三方模块,依赖于 PIL 模块和 qrcode 库. 首先,我们要安装三个模块,qrcode,image,PIL. pip install q ...
- Python生成二维码脚本
简单的记录下二维码生成和解析的Python代码 依赖下面三个包: PIL(图像处理包,安装:pip install PIL) qrcode(二维码生成包,安装:pip install qrcode) ...
- python生成二维码(简易)
首先要的配置: pillow image qrcode zxing 然后直接上代码: import PIL import qrcode # 实例化二维码生成类 qr = qrcode.QRCode( ...
- python生成二维码图片
依赖Pillow库. import qrcode # 简单用法 img = qrcode.make('Hello World!') img.save('qr_code.png') # 高级用法 qr ...
- python 生成二维码
#coding:utf8 try: import qrcode except ImportError: qrcode = None class MakeQr: def onUseQrcode(self ...
- Python将文本生成二维码
#coding:utf-8 ''' Python生成二维码 v1.0 主要将文本生成二维码图片 测试一:将文本生成白底黑字的二维码图片 测试二:将文本生成带logo的二维码图片 ''' __autho ...
- Python 实现二维码生成和识别
今天突然想给自己自己做个头像,然后还是二维码的形式,这样只要扫一扫就可以访问我的主页.然后就开始自己的苦逼之路... 其实实现二维码java,c#,C++等都可以实现:由于自己正在学python,所以 ...
随机推荐
- 本地jar包在maven工程中pom引用
背景 在使用Maven的过程中,经常碰到有些jar包在中央仓库没有的情况.如果公司有私服,那么就把jar包安装到私服上.如果没有私服,那就把jar包安装到本地Maven仓库.下面是如何把jar包导 ...
- MyBatisPlus快速入门
MyBatisPlus快速入门 官方网站 https://mp.baomidou.com/guide 慕课网视频 https://www.imooc.com/learn/1130 入门 https:/ ...
- Identity入门1:Claims、ClaimsIdentity、ClaimsPrincipal详解【转】
在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OWIN的 ...
- Codeforces.1029D.Isolation(DP 分块)
题目链接 \(Description\) 给定长为\(n\)的序列\(A_i\)和一个整数\(K\).把它划分成若干段,满足每段中恰好出现过一次的数的个数\(\leq K\).求方案数. \(K\le ...
- Newcoder 小白月赛20 H 好点
Newcoder 小白月赛20 H 好点 自我感觉不错然后就拿出来了. 读读题之后我们会发现这是让我们求一堆数,然后这些数一定是递减的. 就像这样我们选的就是框起来的,然后我们可以看出来这一定是一个单 ...
- [清华集训2017]小 Y 和地铁(神奇思路,搜索,剪枝,树状数组)
世界上最不缺的就是好题. 首先考虑暴搜.(还有什么题是从这东西推到正解的……) 首先单独一个换乘站明显没用,只用考虑一对对的换乘站. 那么有八种情况:(从题解偷图) 然后大力枚举每个换 ...
- [LeetCode] 592. Fraction Addition and Subtraction 分数加减法
Given a string representing an expression of fraction addition and subtraction, you need to return t ...
- 推荐一款移动端天气App即刻天气
推荐一款移动端天气App即刻天气 一 应用描述 即刻天气预报是一个提供全国各城市15日天气预报和空气质量的APP,包含全国3000个城市天气预报,3万个乡镇天气,15日及48小时空气质量预报,是万千用 ...
- intellij idea 解决2019年4月到期延期问题
56ZS5PQ1RF-eyJsaWNlbnNlSWQiOiI1NlpTNVBRMVJGIiwibGljZW5zZWVOYW1lIjoi5q2j54mI5o6I5p2DIC4iLCJhc3NpZ25lZ ...
- 编译和安装openssl
linux安装了Python3.7之后, pip不好用了,报错如下: pip is configured with locations that require TLS/SSL, however th ...