如何使用Python生成二維碼?
新時代,人們有新的追求,自然而然會有新發明的誕生。去年,在“一帶一路”國際合作高峰論壇舉行期間, 20 國青年投票選出中國的“新四大發明”:高鐵、掃碼支付、共享單車和網購。掃碼支付這種新的支付方式,造就二維碼滿天飛的現象。那麼讓我們分析一下如何使用 Python 來生成二維碼圖片。
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 碼結構如下:
- 功能圖形 功能圖形是不參與編碼資料的區域。它包含空白區、位置探測圖形、位置探測圖形分隔符、定點陣圖形、校正圖形五大模組。
- 空白區 空白區顧名思義就是要留空白。因此,這裡不能有任何圖樣或標記。這樣才能保證 QR 能被識別。 - 位置探測圖形 這個有點類似中文的“回”字。在 QR 碼中有個這樣的標識,它分別的左上、右上和左下角。作用是協助掃描軟體定位 QR 碼並轉換座標系。我們在掃描二維碼的時候,不管是豎著掃、橫著掃、斜著掃都能識別出內容,主要是它的功勞。 - 位置探測圖形分隔符 主要作用是區分功能圖形和編碼區域。 - 定點陣圖形 它由黑白間隔的各自各自組成的線條。主要用於指示標識密度和確定座標系。原因是 QR 碼一種有 40 個版本,也就是說有 40 種尺寸。每種二維碼的尺寸越大,掃描的距離就越遠。 - 校正圖形
- 編碼區域 編碼區域是資料進行編碼儲存的區域。它由格式資訊、版本資訊、資料和糾錯碼字三部分構成。 - 格式資訊 所有尺寸的二維碼都有該資訊。它存放一些格式化資料的資訊,例如容錯級別、資料掩碼,和額外的自身 BCH 容錯碼。 - 版本資訊 版本資訊是規定二維碼的規格。前面講到 QR 碼一共有 40 種規格的矩陣(一般為黑白色),從21x21(版本1),到177x177(版本40),每一版本符號比前一版本 每邊增加4個模組。-- 資料和糾錯碼 主要是儲存實際資料以及用於糾錯碼字。
3.二維碼的繪製過程
二維碼的繪製大概過程如下: 1)在二維碼的左上角、左下角、右上角繪製位置探測圖形。位置探測圖形一定是一個 7x7 的矩陣。 2)繪製校正圖形。校正圖形一定是一個 5x5 的矩陣。 3)繪製兩條連線三個位置探測圖形的定點陣圖形。 4)在上述圖片的基礎上,繼續繪製格式資訊。 5)接著繪製版本資訊。 6)填充資料碼和糾錯碼到二維碼圖中。 7)最後是繪製蒙版圖案。因為按照上述方式填充內容,可能會出現大面積的空白或黑塊的情況,導致掃描識別會十分困難。所以需要對整個影象與蒙版進行蒙版操作(Masking),蒙版操作即為異或 XOR 操作。在這一步,我們可以將資料排列成各種圖片。
4.二維碼的生成
下面推薦兩個庫:qrcode 和 python-qrcode。
- qrcode qrcode 執行在 Python 3 版本上,它可以玩出很多花樣。例如能生成以下三種二維碼圖片:普通二維碼、帶圖片的藝術二維碼(黑白與彩色)、動態二維碼(黑白與彩色)。它比較適合直接用於生成二維碼圖片的場景。
安裝 qrcode 庫可以使用 pip 方式。但是該庫依賴 pillow、numpy 和 imageio。因此,我們需要先安裝依賴庫,再安裝 qrcode。
逐一安裝下面幾個庫。
pip install pillow
pip install numpy
pip install imageio
pip install myqr
該庫生成帶圖片的藝術二維碼算是一大亮點。具體庫的操作請大家自行百度。
- python-qrcode python-qrcode 相比 qrcode 要稍微遜色一點。不過它也有自己的特色。它支援生成向量圖,而且比較適合在程式碼中生成二維碼的場景。
安裝 python-qrcode 同樣建議使用 pip 方式,安裝命令如下:
pip install qrcode
具體庫的說明同樣請大家自行百度。