python 一行命令生成二維碼
現(xiàn)在我們幾乎每天都在使用二維碼,添加個朋友,支付個費(fèi)用,登錄個網(wǎng)站等等都使用到了二維碼,你會不會有時候在想,為什么對方不給你二維碼掃一下,加個好友呢?
哦,不是,你會不會有時候在想,為啥每一張看似差不多的二維碼圖片,里面都承載了各式各樣的信息呢?又如何使用 Python 去生成自己想要的二維碼呢?
那么接下來,就是:
學(xué)習(xí) Python 的正確姿勢

先來簡單說下,其實每一張二維碼,都可以看成是一種數(shù)據(jù)的加密,在這里面的數(shù)據(jù),可以通過某種編碼,轉(zhuǎn)化成黑白不同的點(diǎn),然后按順序排列其中。

當(dāng)我們?nèi)プR別二維碼的時候,其實就是把這些數(shù)據(jù)轉(zhuǎn)化回來。
有時候你會發(fā)現(xiàn)二維碼把它打歪,也能照常識別:
這是因為有定位的標(biāo)識,比如這上面的三個大方塊就是用來定位的。
有時候你也會發(fā)現(xiàn),有些二維碼看起來比較簡單,而有的卻很復(fù)雜的樣子:
這要取決于不同的輸入數(shù)據(jù)編碼類型,版本,以及糾錯級別。
其中版本分 1-40 個級別,版本越高,能存儲的數(shù)據(jù)就越多,用公式來表示就是這樣:vx4+17 。
而糾錯級別又分為 L、M、Q、H,有時候你可能看到有些二維碼整的花里胡哨,或者有的地方缺失了還是能被識別,這可能是這張二維碼的容錯級別比較高。
而級別越低,糾錯能力越低,但是能存儲更多的數(shù)據(jù)。所以一個二維碼,最大可以有 177x177 個矩陣,也就是第 40?版本,而糾錯級別是最 low 的哪一個。
40x4 + 17:


而這些格式信息,都可以在三個大方塊的邊沿定義,然后剩下的區(qū)域就是來放數(shù)據(jù)碼和糾錯碼的,你可以把每個小方塊看成一個 bit,0 代表白色, 1 代表黑色。
那如果有些地方很多 1 ,不就都特么黑了么?這時候還需要用掩碼來掩一下黑黑的地方,這樣才有利于機(jī)器的識別。
恩,可能你已經(jīng)被我整懵了。

沒關(guān)系,如果你想知道二維碼的更多細(xì)節(jié),可以看看這一篇:https://en.wikipedia.org/wiki/QR_code
知道了二維碼這么幾個東東之后,我們接下來玩玩 Python 生成二維碼和識別吧。
有一個 qrcode 庫生成二維碼很是方便,可以使用 pip 先安裝一下:
pip install qrcode
ubutnu 可以使用 apt install:
sudo apt install python3-qrcode
接著就可以直接使用 qr 命令來生成二維碼了:
一行命令就搞定啦,是不是賊方便,當(dāng)然,如果你要定義一些復(fù)雜一些的,比如定義我們剛剛說的糾錯級別,版本等,我們可以導(dǎo)入 qrcode 這個庫,然后你可以自己寫幾行代碼定義一下:

運(yùn)行一波:
剛剛我們說了,二維碼可以容錯,所以可以讓它變得花里胡哨一些,比如小帥b公眾號中文末常留下的這玩意:

掃一掃
學(xué)習(xí) Python 沒煩惱
把它們?nèi)诤掀饋砜梢允沁@樣的:
變成彩色也是可以的:
而這,也是可以使用一行命令實現(xiàn):

這里用到的是 myqr 的庫,其中 -v 可以指定二維碼版本,-l 指定糾錯級別, -c 可以顯示彩色二維碼, -n 可以指定生成的二維碼名稱。
像我剛剛那樣生成的二維碼,只需要一個地址,一張 gif ,然后通過這樣的命令就可以實現(xiàn)了:

如果你想識別二維碼的話,可以使用 pyzbar 來實現(xiàn)。
比如有這么一張二維碼:
可以通過 opencv 讀取這張圖片,然后使用 pyzbar 進(jìn)行解碼:

ok,以上就是小帥b今天給你帶來的分享,希望對你有幫助,我們下回見,peace!
評論
圖片
表情
