参考链接: Python | 使用pyqrcode模块生成QR码

新时代,人们有新的追求,自然而然会有新发明的诞生。去年,在“一带一路”国际合作高峰论坛举行期间,20 国青年投票选出中国的“新四大发明”:高铁、扫码支付、共享单车和网购。其中扫码支付指手机通过扫描二维码跳转到支付页面,再进行付款。这种新的支付方式,造就二维码满天飞的现象。

那么让我们来扒一扒如何使用 Python 生成二维码图片。

二维码

二维码(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”,点的排列组合确定了矩阵式二维条码所代表的意义。

二维码结构

我们的目的是要使用 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个模块。数据和纠错码:主要是存储实际数据以及用于纠错码字。

二维码的绘制过程

二维码已经有一套国际标准了,所以绘制二维码的过程要严格按照标准来执行。这个过程比较复杂,下面总结出了大致绘制过程。如果你想深入了解绘制细节,可以阅读具体标准。

二维码的绘制大概过程如下:

在二维码的左上角、左下角、右上角绘制位置探测图形,位置探测图形一定是一个 7x7 的矩阵;绘制校正图形,校正图形一定是一个 5x5 的矩阵;绘制两条连接三个位置探测图形的定位图形;在上述图片的基础上,继续绘制格式信息;接着绘制版本信息;填充数据码和纠错码到二维码图中;最后绘制蒙版图案。因为按照上述方式填充内容,可能会出现大面积空白或黑块的情况,导致扫描识别十分困难。所以需要对整个图像与蒙版进行蒙版操作(Masking),蒙版操作即为异或 XOR 操作。在这一步,我们可以将数据排列成各种图片。

二维码的生成

我们既然已经了解二维码原理,那么可以利用 Python 生成二维码。网络上高人比比皆是,已经有大神编写了 Python 生成二维码的第三方库,所以我们不需要重复造轮子, 使用现成的库即可。

我就推荐两个库:qrcode 和 python-qrcode。

1、qrcode

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

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

# 逐一安装pip install pillowpip install numpypip install imageiopip 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/。

2、python-qrcode

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

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

pip install qrcode

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

import qrcodeimg = qrcode.make('https://github.com')

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

import qrcodeqr = 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,目前擅长于利用 Python制作网路爬虫以及 Django 框架。

声明:本文为作者投稿,版权归对方所有。

[转载] 如何使用 Python 生成酷炫的二维码?相关推荐

  1. 使用Python制作酷炫的二维码

    参考: https://www.cnblogs.com/zhuwjwh/p/11401312.html 制作动图二维码只需要原始图像是动图就可以哦~~,制作动图可以参考我之前的博客:

  2. 用Python生成动态好玩的二维码

    用Python生成动态好玩的二维码 互联网时代可谓是一手机走天下,二维码已经成为我们工作生活中不可或缺的一种媒介了,不管是社交.出行还是支付,二维码已经在熟悉不过了,似乎人人都有一种"见码就 ...

  3. python——生成带logo的二维码图片并且保存、控制打印机打印图片二维码、整合打印(获取输入框的值)、打包成exe文件

    1.生成带logo的二维码图片并且保存 前提条件:在D盘里有logo.png的图片,生成的二维码图片在D盘里的111.png import qrcode from PIL import Image# ...

  4. 讲解开源项目:用 Python 生成有“灵魂”的二维码

    本文作者:HelloGitHub-LITTLECHIEH 这是 HelloGitHub 推出的<讲解开源项目>系列,今天给大家推荐一个 Python 开源生成二维码的项目--qrcode ...

  5. python 生成待图片的二维码代码

    2019独角兽企业重金招聘Python工程师标准>>> imge.show()在Liunx下可能不行. ps:标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件 ...

  6. python—生成带logo的二维码(零基础向)

    在python 中可以用qrcode 库将文本.图片.视频链接等生成二维码,并用图片处理库PIL 中的Image 方法添加自定义图片,制作带有logo的二维码.本文以Windows 系统为例进行演示. ...

  7. 用 Python 生成有“灵魂”的二维码

    本文作者:HelloGitHub-LITTLECHIEH 这是 HelloGitHub 推出的<讲解开源项目>[1]系列,今天给大家推荐一个 Python 开源生成二维码的项目--qrco ...

  8. Python生成带文字的二维码

    import qrcodefrom PIL import Image from PIL import ImageDraw from PIL import ImageFont# 二维码图片地址 QR_I ...

  9. Python MyQR 生成不一样的二维码

    Python MyQR 生成不一样的二维码 MyQR 最近,闲暇时学习了一点Python的东西,还是比较有趣,想和大家分享一下.顺便说一句,Python 真的很好玩 [手动滑稽] MyQR 二维码又称 ...

最新文章

  1. 关于学习Python的一点学习总结(24->列表推导)
  2. 计算机基础在小学的教学论文,小学基础教育论文范文
  3. 计算机网络的硬件连接图,路由器设置图和网络电缆连接图_计算机硬件和网络_IT /计算机_数据...
  4. 腾讯 监控系统服务器数据采集,实战低成本服务器搭建千万级数据采集系统
  5. Struts2的国际化
  6. 使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第二部分
  7. java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS flg
  8. [Linux]Linux系统调用列表
  9. 浏览器控制台console
  10. 图的连通度问题的求法(转)
  11. Cinder - 读取glusterfs_shares_config代码
  12. 四、守护线程 deamon
  13. 启动auditd时,报错如下,怎么解决?
  14. 对于硬盘做了raid的Windows server 2016服务器重置密码
  15. Spring系列之@ComponentScan、@ComponentScans详解(bean批量注册)
  16. 风控决策引擎——决策流构建实战
  17. vip.163邮箱登录指南,163vip邮箱体验分享
  18. Win7 设置防火墙开放特定端口
  19. import nose ImportError: No module named 'nose'
  20. c语言考研复试一般考什么,考研复试考什么

热门文章

  1. matlab实验论文,毕业论文--基于MATLAB的光学实验仿真
  2. JAVA面向对象OOP→构造方法、this、访问修饰符、static、方法重载、JVM内存分配、GC垃圾回收、包、样例代码
  3. java线上诊断工具,Java线上诊断神器Arthas-1
  4. 排列:计算1!+2*2!+3*3!+...+n*n!
  5. hdu 6351 Beautiful Now
  6. JQueryDOM之属性操作
  7. layui获取select 文本_小程序富文本编辑器editor初体验
  8. fanuc机器人编程手册_FANUC机器人示教编程:距离先执行指令功能介绍与使用方法
  9. 计算机网络—物理层(思维导图)
  10. C#基础9:虚函数与多态