了解每天在用的二維碼怎么使用 Python 生成

新時代锅知,人們有新的追求,自然而然會有新發(fā)明的誕生脓钾。去年售睹,在“一帶一路”國際合作高峰論壇舉行期間氢哮,20國青年投票選出中國的“新四大發(fā)明”:高鐵导匣、掃碼支付沫勿、共享單車和網(wǎng)購短荐。其中掃碼支付指手機通過掃描二維碼跳轉(zhuǎn)到支付頁面,再進行付款卸奉。這種新的支付方式慰毅,造就二維碼滿天飛的現(xiàn)象德撬。那么讓我們來扒一扒如何使用 Python 來生成二維碼圖片谨胞。

1 二維碼

二維碼(2-dimensional bar code)固歪,是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號信息的。它能將數(shù)字畜眨、英文字母昼牛、漢字、日文字母康聂、特殊符號(如空格,%胞四,/ 等)恬汁、二進制等信息記錄到一個正方形的圖片中。

因此辜伟,在轉(zhuǎn)換的過程中氓侧,離不開編碼壓縮方式脊另。在許多種類的二維條碼中,常用的碼制有:Data Matrix, Maxi Code, Aztec, QR Code, Vericode, PDF417, Ultracode, Code 49, Code 16K等约巷。

二維碼在現(xiàn)實生活中的應(yīng)用越來與普遍偎痛,歸于功于 QR code 碼制的流行。我們常說的二維碼就是它独郎。所以踩麦,二維碼又被稱為 QR code。

QR code 是一種矩陣式二維條碼(又稱棋盤式二維條碼)氓癌。它是在一個矩形空間通過黑谓谦、白像素在矩陣中的不同分布進行編碼。在矩陣相應(yīng)元素位置上贪婉,用點(方點反粥、圓點或其他形狀)的出現(xiàn)表示二進制“1”,點的不出現(xiàn)表示二進制的“0”疲迂,點的排列組合確定了矩陣式二維條碼所代表的意義才顿。

2 二維碼結(jié)構(gòu)

我們的目的是要使用 Python 生成 QR 碼,那我們需要先了解二維碼(QR 碼)的結(jié)構(gòu)尤蒿。根據(jù)標(biāo)準(zhǔn)(ISO/IEC 18004)娜膘,我們可以了解到 QR 碼結(jié)構(gòu)如下:


1) 功能圖形

功能圖形是不參與編碼數(shù)據(jù)的區(qū)域。它包含空白區(qū)优质、位置探測圖形竣贪、位置探測圖形分隔符定位圖形巩螃、校正圖形五大模塊演怎。

●?空白區(qū)

空白區(qū)顧名思義就是要留空白。因此避乏,這里不能有任何圖樣或標(biāo)記爷耀。這樣才能保證 QR 能被識別。

●?位置探測圖形

這個有點類似中文的“回”字拍皮。在 QR 碼中有個這樣的標(biāo)識歹叮,它分別的左上、右上和左下角铆帽。作用是協(xié)助掃描軟件定位 QR 碼并轉(zhuǎn)換坐標(biāo)系咆耿。我們在掃描二維碼的時候,不管是豎著掃爹橱、橫著掃萨螺、斜著掃都能識別出內(nèi)容,主要是它的功勞。

●?位置探測圖形分隔符

主要作用是區(qū)分功能圖形和編碼區(qū)域慰技。

●?定位圖形

它由黑白間隔的各自各自組成的線條椭盏。主要用于指示標(biāo)識密度和確定坐標(biāo)系。原因是 QR 碼一種有 40 個版本吻商,也就是說有 40 種尺寸掏颊。每種二維碼的尺寸越大,掃描的距離就越遠艾帐。

●?校正圖形

只有 Version 2 及以上的QR碼有校正標(biāo)識乌叶。校正標(biāo)識用于進一步校正坐標(biāo)系。

2) 編碼區(qū)域

編碼區(qū)域是數(shù)據(jù)進行編碼存儲的區(qū)域掩蛤。它由格式信息枉昏、版本信息數(shù)據(jù)和糾錯碼字三部分構(gòu)成揍鸟。

●?格式信息

所有尺寸的二維碼都有該信息兄裂。它存放一些格式化數(shù)據(jù)的信息,例如容錯級別阳藻、數(shù)據(jù)掩碼晰奖,和額外的自身 BCH 容錯碼。

●?版本信息

版本信息是規(guī)定二維碼的規(guī)格腥泥。前面講到 QR 碼一共有 40 種規(guī)格的矩陣(一般為黑白色)匾南,從21x21(版本1),到177x177(版本40)蛔外,每一版本符號比前一版本 每邊增加4個模塊蛆楞。

●?數(shù)據(jù)和糾錯碼

主要是存儲實際數(shù)據(jù)以及用于糾錯碼字。

3 二維碼的繪制過程

二維碼已經(jīng)是有一套國際標(biāo)準(zhǔn)夹厌,繪制二維碼過程的嚴(yán)格按照標(biāo)準(zhǔn)來執(zhí)行豹爹。這個過程是比較復(fù)雜,我自己也是看了大概矛纹,然后總結(jié)出大致繪制過程臂聋。如果你想深入了解繪制細(xì)節(jié),可以閱讀標(biāo)準(zhǔn)或南。

二維碼的繪制大概過程如下:

1)在二維碼的左上角孩等、左下角、右上角繪制位置探測圖形采够。位置探測圖形一定是一個 7x7 的矩陣肄方。

2)繪制校正圖形。校正圖形一定是一個 5x5 的矩陣吁恍。

3)繪制兩條連接三個位置探測圖形定位圖形扒秸。

4)在上述圖片的基礎(chǔ)上播演,繼續(xù)繪制格式信息冀瓦。

5)接著繪制版本信息伴奥。

6)填充數(shù)據(jù)碼糾錯碼到二維碼圖中。

7)最后是繪制蒙版圖案翼闽。因為按照上述方式填充內(nèi)容拾徙,可能會出現(xiàn)大面積的空白或黑塊的情況,導(dǎo)致掃描識別會十分困難感局。所以需要對整個圖像與蒙版進行蒙版操作(Masking)尼啡,蒙版操作即為異或 XOR 操作。在這一步询微,我們可以將數(shù)據(jù)排列成各種圖片崖瞭。

4 二維碼的生成

我們既然已經(jīng)了解二維碼原理,那么可以利用 Python 生成二維碼撑毛。然而網(wǎng)絡(luò)上高人比比皆是书聚。已經(jīng)有大神編寫了 Python 生成二維碼的第三方庫,所以我們不需要重復(fù)造輪子, 使用現(xiàn)成的庫即可藻雌。

我就推薦兩個庫:qrcodepython-qrcode雌续。

●?qrcode

qrcode運行在 Python 3 版本上,它可以玩出很多花樣胯杭。例如能生成以下三種二維碼圖片:普通二維碼驯杜、帶圖片的藝術(shù)二維碼(黑白與彩色)、動態(tài)二維碼(黑白與彩色)做个。它比較適合直接用于生成二維碼圖片的場景鸽心。

安裝 qrcode 庫可以使用 pip 方式。但是該庫依賴pillow居暖、numpyimageio顽频。因此,我們需要先安裝依賴庫膝但,再安裝 qrcode冲九。最后的安裝命令如下:


該庫生成帶圖片的藝術(shù)二維碼算是一大亮點,具體用法如下:

myqr https://github.com -p github.jpg -c

上述命令作用是將 github 主頁寫到彩色二維碼中跟束。


?

該庫還支持生成 gif 的彩色二維碼圖片莺奸,具體用法如下:

myqr https://github.com -p github.gif -c -con1.5-bri1.6

效果圖如下:


?


●?python-qrcode

python-qrcode相比qrcode要稍微遜色一點。不過它也有自己的特色冀宴。它支持生成矢量圖灭贷,而且比較適合在代碼中生成二維碼的場景。





免費資料分享

?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末略贮,一起剝皮案震驚了整個濱河市甚疟,隨后出現(xiàn)的幾起案子仗岖,更是在濱河造成了極大的恐慌,老刑警劉巖览妖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轧拄,死亡現(xiàn)場離奇詭異,居然都是意外死亡讽膏,警方通過查閱死者的電腦和手機檩电,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來府树,“玉大人俐末,你說我怎么就攤上這事⊙傧溃” “怎么了卓箫?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長垄潮。 經(jīng)常有香客問我烹卒,道長,這世上最難降的妖魔是什么魂挂? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任甫题,我火速辦了婚禮,結(jié)果婚禮上涂召,老公的妹妹穿的比我還像新娘坠非。我一直安慰自己,他們只是感情好果正,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布炎码。 她就那樣靜靜地躺著,像睡著了一般秋泳。 火紅的嫁衣襯著肌膚如雪潦闲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天迫皱,我揣著相機與錄音歉闰,去河邊找鬼。 笑死卓起,一個胖子當(dāng)著我的面吹牛和敬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戏阅,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼昼弟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奕筐?” 一聲冷哼從身側(cè)響起舱痘,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤变骡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后芭逝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塌碌,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年铝耻,在試婚紗的時候發(fā)現(xiàn)自己被綠了誊爹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹬刷。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓢捉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出办成,到底是詐尸還是另有隱情泡态,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布迂卢,位于F島的核電站某弦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏而克。R本人自食惡果不足惜靶壮,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望员萍。 院中可真熱鬧腾降,春花似錦、人聲如沸碎绎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筋帖。三九已至奸晴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間日麸,已是汗流浹背寄啼。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留代箭,地道東北人墩划。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像梢卸,于是被迫代替她去往敵國和親走诞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容