用Python玩转生活之二维码的秘密

点击“简说Python”,选择“置顶/星标公众号”

福利干货,第一时间送达!

本文授权转载自Python专栏,禁二次转载

作者:上海小胖

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


演示环境
  • 操作系统: windows10
  • python版本: python 3.7
  • 代码编辑器: pycharm 2018.2
  • 使用模块: zxing,myqr,qrcode
  • tips: 上面的模块都使用pip安装,它们依赖的模块也会自动安装,相信会Python的你对pip不会太陌生。


首先我们来生成一个 “Hello World”。

通过上面的步骤就完成了这个经典入门,拿出你的手机,用微信、QQ扫码,就会出现“Hello World”字眼,有没有勾起你初学Python的回忆呢。
刚才只是小试牛刀,我们来一个进阶,把生成的二维码保存到本地。

我公众号二维码大家应该很熟悉了吧, 上面步骤生成的都是纯二维码,不符合我们的气质。 接下来我要使用qrcode库生成带有内嵌图片的二维码。

这里说一下version参数和error_correction参数:
  1. version: 就是二维码图片的size,官方称作为version。 version为1的时候,二维码就是2121组成的正方形,version为2的话就是2525,version为3的话就是2929。 最大为40。 所以说最大的尺寸为(40 - 1) * 4 + 21 = 177. 也就是177177 正方形。
  2. error_correction: 纠错级别,级别越高,纠错能力越强。 这也就是为什么我们的二维码残缺了一点点,也能够正确的读取到信息的原因。

错误修正容量


L水平
7%的字码可被修正
M水平
15%的字码可被修正
Q水平
25%的字码可被修正
H水平
30%的字码可被修正
通过上面的步骤,就生成了一张灰色背景填充的二维码,最最核心的中间部分……她是谁?
用Python玩转生活之二维码的秘密_第1张图片

github地址: https://github.com/lincolnloop/python-qrcode

上面就是qrcode库的基本使用。 接下来再介绍一下MyQr库。 这个库就相当强大,强大到可以使用图片作为二维码的背景,甚至是动态图。

使用MyQr模块生成二维码

执行以上代码,我们就可以生成一张以我们图片作为背景的二维码。  
用Python玩转生活之二维码的秘密_第2张图片
如果需要将动态图作为背景图,其实也和正常的背景图类似,只需要写入背景图的文件名就行了,然后保存图片的时候,将二维码的后缀名改成gif即可.
github地址: https://github.com/sylnsfar/qrcode
这里简单的比较一下这两个库吧
  1. qrcode支持中文数据,而myqr不支持中文等字符。
  2. qrcode不能设置背景图,但是能将图片放在二维码中间。
  3. myqr可以将背景设置为图片,并且允许为动态图。

使用zxing库解析二维码
上面我们只说了如何生成二维码图片。 接下来介绍下如何解析二维码中的信息。

短短的几行代码,就能解析出复杂而又简单的二维码,并且得到里面的详细数据。
注意: 如果二维码中的数据包含中文,那么应该会报这样的错误。 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 0: invalid start byte 这个时候只需要修改一下这个库的源码就行了。

修改位置在zxing包下面的__init__.py文件中第81行代码处。
原来是这样的

需要修改为下面这样

这样就不会出错了。

这样,我们就成功的对二维码进行解析了。

后台回复:qrcode,获取本文全套代码

作者写文章极度耗时间,如果你觉得文章还不错,请点赞转发分享下。你的肯定是我最大的鼓励和支持。
仔细阅读下面四篇文章,2小时快速掌握Python基础知识要点

完整Python基础知识要点

我是老表,欢迎转发分享本文

公众号 简说Python 作者:老表,目前已经建了四个Python学习交流群,一个Java学习交流群,一个考研学习交流群,欢迎大家扫下方二维码加管理员老表微信,备注:PythonJava考研等,加入对应的学习交流群,和爱学习的小伙伴们一起进步,简说学习交流,期待你的加入。
管理员二维码:
640?wx_fmt=jpeg
有问题,找老表

你可能感兴趣的:(用Python玩转生活之二维码的秘密)