使用 Python 產生二維碼

來源:互聯網
上載者:User

標籤:如何   圓點   rect   dimen   nsf   最簡   彩色   排列組合   dimens   

新時代,人們有人信新的追求,自然而然會有新發明的誕生。去年,在“一帶一路”國際合作高峰論壇舉行期間, 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 代碼)的結構。

1) 功能圖形
功能圖形是不參與編碼資料的地區。它包含空白區位置探測圖形位置探測圖形分隔字元定位元影像形校正圖形五大模組。

  • 空白區

空白區顧名思義就是要留空白。因此,這裡不能有任何圖樣或標記。這樣才能保證 QR 能被識別。

  • 位置探測圖形

這個有點類似中文的“回”字。在 QR 代碼中有個這樣的標識,它分別的左上、右上和左下角。作用是協助掃描軟體定位 QR 代碼並轉換座標系。我們在掃描二維碼的時候,不管是豎著掃、橫著掃、斜著掃都能識別出內容,主要是它的功勞。

  • 位置探測圖形分隔字元

主要作用是區分功能圖形和編碼地區。

  • 定位元影像形

它由黑白間隔的各自各自組成的線條。主要用於指示標識密度和確定座標系。原因是 QR 代碼一種有 40 個版本,也就是說有 40 種尺寸。每種二維碼的尺寸越大,掃描的距離就越遠。

  • 校正圖形

只有 Version 2 及以上的QR碼有校正標識。校正標識用於進一步校正座標系。

2) 編碼地區
編碼地區是資料進行編碼儲存的地區。它由格式資訊版本資訊資料和錯誤修正碼字三部分構成。

  • 格式資訊

所有尺寸的二維碼都有該資訊。它存放一些格式化資料的資訊,例如容錯層級、資料掩碼,和額外的自身 BCH 容錯碼。

  • 版本資訊

版本資訊是規定二維碼的規格。前面講到 QR 代碼一共有 40 種規格的矩陣(一般為黑白色),從21x21(版本1),到177x177(版本40),每一版本符號比前一版本 每邊增加4個模組。

  • 資料和錯誤修正碼

主要是儲存實際資料以及用於錯誤修正碼字。

3 二維碼的繪製過程

二維碼已經是有一套國際標準,繪製二維碼過程的嚴格按照標準來執行。這個過程是比較複雜,我自己也是看了大概,然後總結出大致繪製過程。如果你想深入瞭解繪製細節,可以閱讀標準。

二維碼的繪製大概過程如下:
1)在二維碼的左上方、左下角、右上方繪製位置探測圖形。位置探測圖形一定是一個 7x7 的矩陣。
2)繪製校正圖形。校正圖形一定是一個 5x5 的矩陣。
3)繪製兩條串連三個位置探測圖形定位元影像形
4)在上述圖片的基礎上,繼續繪製格式資訊
5)接著繪製版本資訊
6)填充資料碼錯誤修正碼到二維碼圖中。
7)最後是繪製蒙版圖案。因為按照上述方式填充內容,可能會出現大面積的空白或黑塊的情況,導致掃描識別會十分困難。所以需要對整個映像與蒙版進行蒙版操作(Masking),蒙版操作即為異或 XOR 操作。在這一步,我們可以將資料排列成各種圖片。

4 二維碼的產生

我們既然已經瞭解二維碼原理,那麼可以利用 Python 產生二維碼。然而網路上高人比比皆是。已經有大神編寫了 Python 產生二維碼的第三方庫,所以我們不需要重複造輪子, 使用現成的庫即可。

我就推薦兩個庫:qrcode 和 python-qrcode

  • qrcode

qrcode 運行在 Python 3 版本上,它可以玩出很多花樣。例如能產生以下三種二維碼圖片:普通二維碼、帶圖片的藝術二維碼(黑白與彩色)、動態二維碼(黑白與彩色)。它比較適合直接用於產生二維碼圖片的情境。

安裝 qrcode 庫可以使用 pip 方式。但是該庫依賴 pillownumpy 和imageio。因此,我們需要先安裝依賴庫,再安裝 qrcode。最後的安裝命令如下:

# 逐一安裝pip install pillowpip install numpypip install imageiopip install myqr

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

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

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

該庫還支援產生 gif 的彩色二維碼圖片,具體用法如下:

myqr https://github.com -p github.gif -c -con 1.5 -bri 1.6

最後補上該庫的 Github 地址:https://github.com/sylnsfar/qrcode

  • python-qrcode

python-qrcode 相比 qrcode 要稍微遜色一點。不過它也有自己的特色。它支援產生向量圖,而且比較適合在代碼中產生二維碼的情境。

安裝 python-qrcode 同樣建議使用 pip 方式,安裝命令如下:

pip install qrcode

在 Python 代碼中,最簡單的用法是這樣。

import qrcodeimg = qrcode.make(‘https://github.com‘)

它也支援自訂二維碼的資訊,具體用法如下:

import qrcodeqr = qrcode.QRCode(    version=1,    error_correction=qrcode.constants.ERROR_CORRECT_L,    box_size=10,    border=4,)qr.add_data(‘https://github.com‘)qr.make(fit=True)img = qr.make_image(fill_color="black", back_color="white")

  

使用 Python 產生二維碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.