阅读文本大概需要 8 分钟。

新时代,人们有人信新的追求,自然而然会有新发明的诞生。去年,在“一带一路”国际合作高峰论坛举行期间, 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 生成二维码的第三方库,所以我们不需要重复造轮子, 使用现成的库即可。

我就推荐两个库:qrcodepython-qrcode

  • qrcode

qrcode 运行在 Python 3 版本上,它可以玩出很多花样。例如能生成以下三种二维码图片:普通二维码、带图片的艺术二维码(黑白与彩色)、动态二维码(黑白与彩色)。它比较适合直接用于生成二维码图片的场景。

安装 qrcode 库可以使用 pip 方式。但是该库依赖 pillownumpyimageio。因此,我们需要先安装依赖库,再安装 qrcode。最后的安装命令如下:

该库生成带图片的艺术二维码算是一大亮点,具体用法如下:

上述命令作用是将 github 主页写到彩色二维码中。


该库还支持生成 gif 的彩色二维码图片,具体用法如下:

效果图如下:


最后补上该库的 Github 地址:https://github.com/sylnsfar/qrcode

  • python-qrcode

python-qrcode 相比 qrcode 要稍微逊色一点。不过它也有自己的特色。它支持生成矢量图,而且比较适合在代码中生成二维码的场景。

安装 python-qrcode 同样建议使用 pip 方式,安装命令如下:

在 Python 代码中,最简单的用法是这样。

它也支持自定义二维码的信息,具体用法如下:

如果你想深入了解该库,可以到 Github 仓库阅读相关的文档。
Github 地址是:https://github.com/lincolnloop/python-qrcode

往期热门:

10个可以快速用Python进行数据分析的小技巧

如果对你有帮助,点个好看支持一下

互联网 4 大发明之二维码,你如何使用 Python 生成二维码?相关推荐

  1. 使用 Python 生成二维码

    本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享 新时代,人们有人信新的追求,自然而然会有新发明的诞生.去年,在"一带一路"国际合作高峰论坛举行期间, 20 国 ...

  2. 条形码、二维码扫一扫和生成二维码采用ZXing3.0开源库在android studio中实现

    在开始之前先给各位上个运行效果图 二维码QRcode全称Quick Response Code 通过在一个矩形区域内使用黑白像素来进行编码 高纠错性.高可用性.高识别性 四周面有3个大的方框和一个小的 ...

  3. 直播视频app源码,Android 点击生成二维码

    直播视频app源码,Android 点击生成二维码实现的相关代码 activity.xml代码如下: <?xml version="1.0" encoding="u ...

  4. python生成二维码、动态二维码 和 而二维码解析

    python生成二维码.动态二维码 和 而二维码解析(8-20190129) 文章目录: 一.二维码介绍 二. 就是为了好玩所以想搞一下二维码,"好玩",少年醒醒,不要骗自己啦,起 ...

  5. python生成二维码_python生成二维码的实例详解

    python生成二维码的实例详解 版本相关 操作系统:Mac OS X EI Caption Python版本:2.7 IDE:Sublime Text 3 依赖库 Python生成二维码需要的依赖库 ...

  6. Python生成二维码的操作方法

    使用的是qrcode库,在使用之前需要安装此库 pip install qrcode 网址 #python生成二维码 import qrcode img=qrcode.make("http: ...

  7. java生成二维码到文件,java生成二维码转成BASE64

    java生成二维码到文件,java生成二维码转成BASE64 如题,利用java和第三方库,把指定的字符串生成二维码,并且把二维码保存成图片,转换成BASE64格式. 需要的jar文件: packag ...

  8. 标题 Python生成二维码和解码

    标题 Python生成二维码和解码 一.首先下载第三方库 方法一:打开cmd命令窗口,通过命令pip install 包名 进行第三方库安装 1.找到自己的Python环境位置目录,输入cmd回车进入 ...

  9. python3 生成二维码_windows使用python3.4生成二维码

    今天看到python可以直接生成二维码,手痒也想试一下.机器是windows操作系统,安装了python3.4版本.其实python生成二维码主要用到了qrcode这一二维码生成库,实现过程还是很简单 ...

最新文章

  1. [原]flash研究(三)——Falsh与JavaScript交互
  2. 《编程之美》读书笔记08:2.9 Fibonacci序列
  3. thinkphp 模板页面出现空白
  4. App后台开发运维和架构实践学习总结(8)——后台产品设计的4个原则
  5. 【逆序对相关/数学】【P1966】【NOIP2013D1T2】 火柴排队
  6. java.lang.IllegalStateException: Unable to read meta-data for class 问题的解决
  7. FCM算法研究(一)
  8. 团队协作工具-版本控制软件SVN、Git、码云
  9. Win11系统桌面状态栏电池图标不显示怎么办?
  10. python猜词游戏演讲ppt_Python 猜词游戏–多步骤猜词+评分系统
  11. python的胶水特性是怎样出来的_为什么说python是胶水语言
  12. STL文件模型体积计算
  13. 用ode求解二阶非线性微分方程
  14. 这几款真香旗舰机,买到就是赚到,有你入手了的吗?
  15. 电脑托文件到服务器,本地电脑文件拖入云服务器
  16. OpenGL学习笔记(十五)
  17. Java类的加载及父类子类加载顺序
  18. java点赞_java实现点赞功能示例
  19. 均是素数——天梯训练赛
  20. 经济管理类的顶刊和核心整理

热门文章

  1. Redis队列php多线程请求
  2. yaf框架学习文件配置
  3. Nginx + Lua + 共享内存实现动态查询(简单例子)
  4. Yii的应用主体的配置
  5. 关于微信授权与登录的相关操作(纯手敲)
  6. c++ dll继续使用然后强制删除dll文件_Windows 10系统安全风险,近300个系统执行文件容易遭受劫持攻击...
  7. 谁都忍不了烂代码,如何用重构的方式让它整洁起来?
  8. node爬取某app数据_某APP次日留存数据报告
  9. oracle书写高质量sql,干货!SQL性能优化,书写高质量SQL语句
  10. html透明度_学好Web前端开发,必要了解的HTML+CSS的技巧有哪些