使用 Python 生成二維碼
使用 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 碼結構如下:
圖片來源網路
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 方式。但是該庫依賴 pillow 、 numpy 和 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")
如果你想深入瞭解該庫,可以到 Github 倉庫閱讀相關的文件。
Github 地址是:https://github.com/lincolnloop/python-qrcode
About Me
........................................................................................................................ ● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除 ● 本文在itpub( http://blog.itpub.net/26736162 )、部落格園( http://www.cnblogs.com/lhrbest )和個人weixin公眾號( xiaomaimiaolhr )上有同步更新 ● 本文itpub地址: http://blog.itpub.net/26736162 ● 本文部落格園地址: http://www.cnblogs.com/lhrbest ● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/ ● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/ ● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826 ........................................................................................................................ ● QQ群號: 230161599 (滿) 、618766405 ● weixin群:可加我weixin,我拉大家進群,非誠勿擾 ● 聯絡我請加QQ好友 ( 646634621 ) ,註明新增緣由 ● 於 2019-06-01 06:00 ~ 2019-06-30 24:00 在西安完成 ● 最新修改時間:2019-06-01 06:00 ~ 2019-06-30 24:00 ● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解 ● 版權所有,歡迎分享本文,轉載請保留出處 ........................................................................................................................ ● 小麥苗的微店 : https://weidian.com/s/793741433?wfr=c&ifr=shopdetail ● 小麥苗出版的資料庫類叢書 : http://blog.itpub.net/26736162/viewspace-2142121/ ● 小麥苗OCP、OCM、高可用網路班 : http://blog.itpub.net/26736162/viewspace-2148098/ ● 小麥苗騰訊課堂主頁 : https://lhr.ke.qq.com/ ........................................................................................................................ 使用 weixin客戶端 掃描下面的二維碼來關注小麥苗的weixin公眾號( xiaomaimiaolhr )及QQ群(DBA寶典)、新增小麥苗weixin, 學習最實用的資料庫技術。
........................................................................................................................ |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2648091/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何使用 Python 生成二維碼?Python
- 二維碼生成-PythonPython
- Python如何生成個性二維碼Python
- 二維碼生成
- PHP、Python、JavaScript 識別二維碼和生成二維碼解決方案PHPPythonJavaScript
- 使用ABAP程式碼生成二維碼(QR Code)
- 二維碼管理平臺 生成二維碼
- react使用qrcode.react生成二維碼React
- 一行python生成終端二維碼Python
- Python生成動態二維碼,MyQR介紹Python
- 趣味二維碼生成
- Flutter - 生成二維碼與識別二維碼Flutter
- 用Python3 QrCode生成一個二維碼Python
- 直播系統搭建,java二維碼 生成二維碼Java
- qrcodejs js生成二維碼JS
- Tp框架 生成二維碼框架
- ios--二維碼生成iOS
- 二維碼線上生成
- 二維碼生成工具類
- Amazing QR!一款 Python 二維碼生成器!Python
- iOS 生成二維碼/條形碼iOS
- 支付寶 二維碼/轉賬碼/生成方式,突破二維碼生成數量的限制
- php生成二維碼圖片PHP
- PHP生成簡單二維碼PHP
- url 生成二維碼圖片
- java實現二維碼生成Java
- Tp生成小程式二維碼
- 二維碼生成工具 Simple QrCode
- APISpace 的二維碼生成器,效果好、使用易API
- 從普通二維碼到檔案生成二維碼的轉變
- iOS 二維碼生成以及識別iOS
- Vue專案中生成二維碼Vue
- 根據URL地址生成二維碼
- YII2.0框架生成二維碼框架
- Python 生成條形碼、二維碼 (Code 128、EAN-13、QR code等)Python
- 【Python】【OpenCV】定位二維碼PythonOpenCV
- 微信二次開發(生成二維碼)
- 使用python玩轉二維碼!速學速用!⛵Python