今天就跟大家聊聊有關(guān) Python中怎么生成二維碼,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供蘇仙網(wǎng)站建設(shè)、蘇仙做網(wǎng)站、蘇仙網(wǎng)站設(shè)計(jì)、蘇仙網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、蘇仙企業(yè)網(wǎng)站模板建站服務(wù),10年蘇仙做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
1 二維碼
二維碼(2-dimensional bar code),是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號(hào)信息的。它能將數(shù)字、英文字母、漢字、日文字母、特殊符號(hào)(如空格,%,/ 等)、二進(jìn)制等信息記錄到一個(gè)正方形的圖片中。
因此,在轉(zhuǎn)換的過程中,離不開編碼壓縮方式。在許多種類的二維條碼中,常用的碼制有:Data Matrix, Maxi Code, Aztec, QR Code, Vericode, PDF417, Ultracode, Code 49, Code 16K等。
二維碼在現(xiàn)實(shí)生活中的應(yīng)用越來與普遍,歸于功于 QR code 碼制的流行。我們常說的二維碼就是它。所以,二維碼又被稱為 QR code。
QR code 是一種矩陣式二維條碼(又稱棋盤式二維條碼)。它是在一個(gè)矩形空間通過黑、白像素在矩陣中的不同分布進(jìn)行編碼。在矩陣相應(yīng)元素位置上,用點(diǎn)(方點(diǎn)、圓點(diǎn)或其他形狀)的出現(xiàn)表示二進(jìn)制“1”,點(diǎn)的不出現(xiàn)表示二進(jìn)制的“0”,點(diǎn)的排列組合確定了矩陣式二維條碼所代表的意義。
我們的目的是要使用 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 能被識(shí)別。
位置探測圖形
這個(gè)有點(diǎn)類似中文的“回”字。在 QR 碼中有個(gè)這樣的標(biāo)識(shí),它分別的左上、右上和左下角。作用是協(xié)助掃描軟件定位 QR 碼并轉(zhuǎn)換坐標(biāo)系。我們?cè)趻呙瓒S碼的時(shí)候,不管是豎著掃、橫著掃、斜著掃都能識(shí)別出內(nèi)容,主要是它的功勞。
位置探測圖形分隔符
主要作用是區(qū)分功能圖形和編碼區(qū)域。
定位圖形
它由黑白間隔的各自各自組成的線條。主要用于指示標(biāo)識(shí)密度和確定坐標(biāo)系。原因是 QR 碼一種有 40 個(gè)版本,也就是說有 40 種尺寸。每種二維碼的尺寸越大,掃描的距離就越遠(yuǎn)。
校正圖形
只有 Version 2 及以上的QR碼有校正標(biāo)識(shí)。校正標(biāo)識(shí)用于進(jìn)一步校正坐標(biāo)系。
2) 編碼區(qū)域
編碼區(qū)域是數(shù)據(jù)進(jìn)行編碼存儲(chǔ)的區(qū)域。它由格式信息、版本信息、數(shù)據(jù)和糾錯(cuò)碼字三部分構(gòu)成。
格式信息
所有尺寸的二維碼都有該信息。它存放一些格式化數(shù)據(jù)的信息,例如容錯(cuò)級(jí)別、數(shù)據(jù)掩碼,和額外的自身 BCH 容錯(cuò)碼。
版本信息
版本信息是規(guī)定二維碼的規(guī)格。前面講到 QR 碼一共有 40 種規(guī)格的矩陣(一般為黑白色),從21x21(版本1),到177x177(版本40),每一版本符號(hào)比前一版本 每邊增加4個(gè)模塊。
數(shù)據(jù)和糾錯(cuò)碼
主要是存儲(chǔ)實(shí)際數(shù)據(jù)以及用于糾錯(cuò)碼字。
二維碼已經(jīng)是有一套國際標(biāo)準(zhǔn),繪制二維碼過程的嚴(yán)格按照標(biāo)準(zhǔn)來執(zhí)行。這個(gè)過程是比較復(fù)雜,我自己也是看了大概,然后總結(jié)出大致繪制過程。如果你想深入了解繪制細(xì)節(jié),可以閱讀標(biāo)準(zhǔn)。
二維碼的繪制大概過程如下:
1)在二維碼的左上角、左下角、右上角繪制位置探測圖形。位置探測圖形一定是一個(gè) 7x7 的矩陣。
2)繪制校正圖形。校正圖形一定是一個(gè) 5x5 的矩陣。
3)繪制兩條連接三個(gè)位置探測圖形的定位圖形。
4)在上述圖片的基礎(chǔ)上,繼續(xù)繪制格式信息。
5)接著繪制版本信息。
6)填充數(shù)據(jù)碼和糾錯(cuò)碼到二維碼圖中。
7)最后是繪制蒙版圖案。因?yàn)榘凑丈鲜龇绞教畛鋬?nèi)容,可能會(huì)出現(xiàn)大面積的空白或黑塊的情況,導(dǎo)致掃描識(shí)別會(huì)十分困難。所以需要對(duì)整個(gè)圖像與蒙版進(jìn)行蒙版操作(Masking),蒙版操作即為異或 XOR 操作。在這一步,我們可以將數(shù)據(jù)排列成各種圖片。
我們既然已經(jīng)了解二維碼原理,那么可以利用 Python 生成二維碼。然而網(wǎng)絡(luò)上高人比比皆是。已經(jīng)有大神編寫了 Python 生成二維碼的第三方庫,所以我們不需要重復(fù)造輪子, 使用現(xiàn)成的庫即可。
我就推薦兩個(gè)庫:qrcode和 python-qrcode。
qrcode
qrcode運(yùn)行在 Python 3 版本上,它可以玩出很多花樣。例如能生成以下三種二維碼圖片:普通二維碼、帶圖片的藝術(shù)二維碼(黑白與彩色)、動(dòng)態(tài)二維碼(黑白與彩色)。它比較適合直接用于生成二維碼圖片的場景。
安裝 qrcode 庫可以使用 pip 方式。但是該庫依賴 pillow、numpy和 imageio。因此,我們需要先安裝依賴庫,再安裝 qrcode。最后的安裝命令如下:
# 逐一安裝
pip install pillow
pip install numpy
pip install imageio
pip install myqr
該庫生成帶圖片的藝術(shù)二維碼算是一大亮點(diǎn),具體用法如下:
myqr https://github.com -p github.jpg -c
python-qrcode
python-qrcode相比 qrcode要稍微遜色一點(diǎn)。不過它也有自己的特色。它支持生成矢量圖,而且比較適合在代碼中生成二維碼的場景。
安裝 python-qrcode 同樣建議使用 pip 方式,安裝命令如下:
pip install qrcode
在 Python 代碼中,最簡單的用法是這樣。
import qrcode
img = qrcode.make('https://github.com')
它也支持自定義二維碼的信息,具體用法如下:
import qrcode
qr = 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")
看完上述內(nèi)容,你們對(duì) Python中怎么生成二維碼有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。