python 一行命令生成二维码

学习python的正确姿势

共 1417字,需浏览 3分钟

 · 2020-04-28

现在我们几乎每天都在使用二维码,添加个朋友,支付个费用,登录个网站等等都使用到了二维码,你会不会有时候在想,为什么对方不给你二维码扫一下,加个好友呢?






哦,不是,你会不会有时候在想,为啥每一张看似差不多的二维码图片,里面都承载了各式各样的信息呢?又如何使用 Python 去生成自己想要的二维码呢?

那么接下来,就是:



学习 Python 的正确姿势

c2906cb9894d481671fbc6228b823a22.webp




先来简单说下,其实每一张二维码,都可以看成是一种数据的加密,在这里面的数据,可以通过某种编码,转化成黑白不同的点,然后按顺序排列其中。


b1874349b1dcc0371371f70bc02505d8.webp




当我们去识别二维码的时候,其实就是把这些数据转化回来。

有时候你会发现二维码把它打歪,也能照常识别:





这是因为有定位的标识,比如这上面的三个大方块就是用来定位的。


有时候你也会发现,有些二维码看起来比较简单,而有的却很复杂的样子:







这要取决于不同的输入数据编码类型,版本,以及纠错级别。

其中版本分 1-40 个级别,版本越高,能存储的数据就越多,用公式来表示就是这样:vx4+17 。

而纠错级别又分为 L、M、Q、H,有时候你可能看到有些二维码整的花里胡哨,或者有的地方缺失了还是能被识别,这可能是这张二维码的容错级别比较高。
而级别越低,纠错能力越低,但是能存储更多的数据。所以一个二维码,最大可以有 177x177 个矩阵,也就是第 40 版本,而纠错级别是最 low 的哪一个。
40x4 + 17:



8fac20a1e3b057b9733740e5c45f79d4.webp





b7cd89687363635b60a729613d3416e3.webp



而这些格式信息,都可以在三个大方块的边沿定义,然后剩下的区域就是来放数据码和纠错码的,你可以把每个小方块看成一个 bit,0 代表白色, 1 代表黑色。
那如果有些地方很多 1 ,不就都特么黑了么?这时候还需要用掩码来掩一下黑黑的地方,这样才有利于机器的识别。

恩,可能你已经被我整懵了。



2bfca16c63916d14da392b13ad0c64e5.webp


没关系,如果你想知道二维码的更多细节,可以看看这一篇:https://en.wikipedia.org/wiki/QR_code

知道了二维码这么几个东东之后,我们接下来玩玩 Python 生成二维码和识别吧。
有一个 qrcode 库生成二维码很是方便,可以使用 pip 先安装一下:
pip install qrcode

ubutnu 可以使用 apt install:

sudo apt install python3-qrcode

接着就可以直接使用 qr 命令来生成二维码了:




一行命令就搞定啦,是不是贼方便,当然,如果你要定义一些复杂一些的,比如定义我们刚刚说的纠错级别,版本等,我们可以导入 qrcode 这个库,然后你可以自己写几行代码定义一下:



090ba520bc4500c7ab313c6cff675863.webp




运行一波:








刚刚我们说了,二维码可以容错,所以可以让它变得花里胡哨一些,比如小帅b公众号中文末常留下的这玩意:


14f04624d54e6fcf5e39d5eaa77d76f6.webp

扫一扫

学习 Python 没烦恼





把它们融合起来可以是这样的:





变成彩色也是可以的:






而这,也是可以使用一行命令实现:


f2df0fe21d81b0d38f702b0bb81b25cf.webp



这里用到的是 myqr 的库,其中 -v 可以指定二维码版本,-l 指定纠错级别, -c 可以显示彩色二维码, -n 可以指定生成的二维码名称。
像我刚刚那样生成的二维码,只需要一个地址,一张 gif ,然后通过这样的命令就可以实现了:


c439ad795aed4312d33e5d9cd9e5de60.webp



如果你想识别二维码的话,可以使用 pyzbar 来实现。
比如有这么一张二维码:






可以通过 opencv 读取这张图片,然后使用 pyzbar 进行解码:




fb306df7ef296f1b356d728a0473f9e6.webp



ok,以上就是小帅b今天给你带来的分享,希望对你有帮助,我们下回见,peace!



点击留言



浏览 39
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报