新时代,人们有新的追求,自然而然会有新发明的诞生。去年,在“一带一路”国际合作高峰论坛举行期间, 20 国青年投票选出中国的“新四大发明”:高铁、扫码支付、共享单车和网购。扫码支付这种新的支付方式,造就二维码满天飞的现象。
那么让我们分析一下如何使用 Python 来生成二维码图片

目录

  • 1.二维码介绍
  • 2.二维码结构
    • 2.1功能图形
    • 2.2编码区域
  • 3.二维码的绘制过程
  • 4.二维码生成需要的库
  • 5.代码演示
    • 5.1生成普通二维码
    • 5.2生成带图片的二维码
    • 5.3生成带动图的二维码
    • 5.4生成可以输入汉字的二维码

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 码结构如下:

2.1功能图形

功能图形是不参与编码数据的区域。它包含空白区、位置探测图形、位置探测图形分隔符、定位图形、校正图形五大模块。

- 空白区
空白区顾名思义就是要留空白。因此,这里不能有任何图样或标记。这样才能保证 QR 能被识别。
- 位置探测图形
这个有点类似中文的“回”字。在 QR 码中有个这样的标识,它分别的左上、右上和左下角。作用是协助扫描软件定位 QR 码并转换坐标系。我们在扫描二维码的时候,不管是竖着扫、横着扫、斜着扫都能识别出内容,主要是它的功劳。
- 位置探测图形分隔符
主要作用是区分功能图形和编码区域。
- 定位图形
它由黑白间隔的各自各自组成的线条。主要用于指示标识密度和确定坐标系。原因是 QR 码一种有 40 个版本,也就是说有 40 种尺寸。每种二维码的尺寸越大,扫描的距离就越远。
- 校正图形
只有 Version 2 及以上的QR码有校正标识。校正标识用于进一步校正坐标系。

2.2编码区域

编码区域是数据进行编码存储的区域。它由格式信息、版本信息、数据和纠错码字三部分构成。
- 格式信息
所有尺寸的二维码都有该信息。它存放一些格式化数据的信息,例如容错级别、数据掩码,和额外的自身 BCH 容错码。
- 版本信息
版本信息是规定二维码的规格。前面讲到 QR 码一共有 40 种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40),每一版本符号比前一版本 每边增加4个模块。-- 数据和纠错码
主要是存储实际数据以及用于纠错码字。

3.二维码的绘制过程

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

4.二维码生成需要的库

下面推荐两个库:qrcode 和 MyQR。

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

安装 qrcode 库可以使用 pip 方式。但是该库依赖 pillow、numpy 和 imageio。因此,我们需要先安装依赖库,再安装 qrcode。
逐一安装下面几个库。
pip install pillow
pip install numpy
pip install imageio
pip install myqr

该库生成带图片的艺术二维码算是一大亮点。具体库的操作请大家自行百度。

- MyQR
MyQR是一个能够生成自定义二维码的第三方库,可以根据需要生成普通二维码、带图片的艺术二维码,也可以生成动态二维码。
安装方法:
pip install myqr

5.代码演示

在编程实现生成二维码时,需要注意尽量不要使用vs code编译器,可以使用jupyter notebook或其他编译器代替。vscode似乎有点bug。

5.1生成普通二维码

from MyQR import myqr  #注意大小写
myqr.run(words="网址链接或者字符串,不支持中文")

运行后生成一个名为“qrcode.png”的二维码图片,用微信扫一扫生成的二维码,就会自动跳转到这个地址。

5.2生成带图片的二维码

此为彩色图片代码,需要黑白图片就去掉参数colorized=True。代码如下:

from MyQR import myqr
myqr.run(words='https://blog.csdn.net/didi_ya',# 扫描二维码后,显示的内容,或是跳转的链接version=5,  # 设置容错率level='H',  # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高picture='D:\\Desktop\\cy.jpg',  # 图片所在目录,可以是动图colorized=True,  # 黑白(False)还是彩色(True)
)

输出结果:

5.3生成带动图的二维码

将图片位置改成动图即可,代码如下:

from MyQR import myqr
myqr.run(words='https://blog.csdn.net/didi_ya',# 扫描二维码后,显示的内容,或是跳转的链接version=5,  # 设置容错率level='H',  # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高picture='D:\\Desktop\\cy.gif',  # 图片所在目录,可以是动图colorized=True,  # 黑白(False)还是彩色(True)
)

输出结果:

5.4生成可以输入汉字的二维码

代码如下:

import qrcode
from PIL import Image#保存文件是用到
#  version是二维码的尺寸,数字大小决定二维码的密度
#  error_correction:指误差
#  box_size:参数用来控制二维码的每个单元(box)格有多少像素点
#  border: 参数用控制每条边有多少个单元格(默认值是4,这是规格的最小值qr = qrcode.QRCode(version=5,error_correction=qrcode.constants.ERROR_CORRECT_L,box_size=8,border=4,)
# 添加数据
qr.add_data('你好')
# 生成二维码
qr.make(fit=True)
img = qr.make_image()
img.save('C:\\Users\\91291\\Documents\\cy1_qrcode.png')
img.show()

输出:

ok,以上便是全部内容了。

如果嫌麻烦,直接可以百度搜索二维码生成器,简单方便。

二维码介绍及二维码的Python生成相关推荐

  1. 常用二维码介绍与分析

    一.常用二维码介绍 常用二维码主要有QRCode和DataMatrix,分别是日本与美国发明的,不常用但是将兴起的有VeriCode和汉信码,前者为美国的,连规范都未公开的二维码标准,而汉信码,是中国 ...

  2. Revit插件建模助手的“构件信息录入”“构件二维码”介绍

    Revit插件建模助手的"构件信息录入""构件二维码"介绍 一.有求必应模块 → 构件信息录入 1.选择[构件信息录入]功能添加到Revit界面. 2.使用[构 ...

  3. 125KHz 100cm ID 读卡电路_二维码门禁读卡器动态二维码扫描器二维码刷卡读头介绍...

    二维码门禁读卡器 产品介绍 二维码门禁读卡器是新一代智能门禁读卡器,产品金属外观高端大气,扫描速度快,识别率高,兼容性强.可接任意支持维根输入的门禁控制器,适应各种应用场景,目前广泛应用办公楼访客进出 ...

  4. ZXing二维码介绍

    ZXing(Zebra Crossing)是Google开发的一个二维码解析和生成的开源库. ZXing GitHub地址 引入 <dependency><groupId>co ...

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

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

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

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

  7. 怎么用python生成带二维码的照片_怎么制作二维码图片-Python 生成个性二维码

    一.实验介绍1.1 实验内容 本课程通过调用MyQR接口来实现生成个人所需二维码,并可以设置二维码的大小.是否在现有图片的基础上生成.是否生成动态二维码. 1.2 知识点 Python3基础 MyQR ...

  8. 【二维码】艺术二维码生成

    一.艺术二维码 艺术二维码是在原有的黑白二维码的基础上根据二维码解析方式再配合新兴的设计方法,进行二维码美化,制作出的形态各异二维码,具体分为静态二维码设计.动态二维码设计.3D二维码设计.创意二维码 ...

  9. 微信扫码登录自定义二维码样式

    微信扫码登录自定义二维码样式 前言 Java生成data-url 1.工具类pom 2.代码实现 将data-url赋值给href 前言 今天在做web端扫码登录时,前端需要定义二维码的样式.官方文档 ...

最新文章

  1. 计算机组成原理-第一章
  2. python内置函数源码_如何查看python内置函数源码
  3. Java ArrayDeque
  4. 建模元件有哪些在MapleSim中
  5. android 悬浮按钮 魅族,Android使用RecycleView实现魅族手机通讯录界面
  6. 7-15 城市间紧急救援 (10 分)
  7. html item 左右滑动,拖动Html元素集合 Drag and Drop any item
  8. JavaScript菜鸽子基础知识总结(一)
  9. 在JavaScript中将字符转换为ASCII代码
  10. EL表达式中fn函数
  11. 优秀ASP.NET程序员的修炼之路(转)
  12. OpenvSwitch实现简单VLAN
  13. AltiumDesigner20绘制51单片机最小系统原理图详细流程
  14. cad文字递增快捷键_CAD文字/表格递增复制怎么用,快捷键是什么?
  15. SuperMemo POJ - 3580
  16. 高中计算机必修选修知识点总结,高中数学必修+选修全部知识点精华归纳总结.pdf...
  17. html调整中文文字间距,HTML 中调整文字间距,行间距和文字竖排
  18. Python实现excel表格合并
  19. Number of unique ways that ATM can tender
  20. Hibernate----初识

热门文章

  1. excel排序求和:如何统计前几名数据合计 下篇
  2. Windows电脑蓝牙打电话-预研总结
  3. 【spark使用】4. Dataset转换算子使用
  4. http://39.98.219.132 题库标准答案(题库序号:463)之编写一个给一个分数约分的程序
  5. Axure谷歌浏览器扩展程序下载及安装方法(免翻墙)
  6. Lession10 常用类(正则表达式、Date Time结构、string类、Math类)
  7. Ps怎么快速抠图白色背景?教你两招轻松搞定!
  8. word2013怎么去掉所有文字下面的波浪线
  9. android-smart-image-view图片加载简单使用
  10. 火狐html显示黑点