詳解Python如何生成優(yōu)雅的二維碼
二維碼作為一種信息傳遞的工具,在當(dāng)今社會(huì)發(fā)揮了重要作用。從手機(jī)用戶登錄到手機(jī)支付,生活的各個(gè)角落都能看到二維碼的存在,那么我們?nèi)绾巫约荷梢粋€(gè)二維碼呢?如果使用Python,我們可以很快的生成一個(gè)二維碼,我們可以自己定義二維碼包含的信息。這些信息可以是文字、圖片,也可以是網(wǎng)站。下面我們就來(lái)看看如何生成一個(gè)二維碼。
一、使用MyQR生成二維碼
生成二維碼的方式多種多樣,我們先來(lái)看看使用MyQR模塊如何生成一個(gè)二維碼。
(1)模塊安裝
在開(kāi)始使用之前我們需要先安裝該模塊。這里使用pip直接下載,這里選用的是國(guó)內(nèi)的源:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ myqr
安裝完成后我們就可以開(kāi)始使用了。先生成一個(gè)最簡(jiǎn)單的二維碼:
from MyQR import myqr # 注意區(qū)分大小寫 myqr.run(words='Do not go gentle into that good night!') # 生成二維碼
在我們運(yùn)行這個(gè)程序后,py文件同目錄下會(huì)生成圖片qrcode.png,該圖片就是我們的二維碼圖片,掃出來(lái)就是我們上面設(shè)置的文本信息了。
(2)生成一個(gè)圖像二維碼
我們?nèi)粘I钪械亩S碼都比較單調(diào),有純二維碼,整個(gè)二維碼只有黑白方塊;也有帶圖片的二維碼,通常是在二維碼中心放置一個(gè)圖片,而我們現(xiàn)在要做的是一個(gè)整體是一張圖片的二維碼。也就是將一張圖片作為背景。這種二維碼實(shí)現(xiàn)起來(lái)也非常簡(jiǎn)單:
from MyQR import myqr myqr.run( words='http://www.baidu.com', # 包含信息 picture='lbxx.jpg', # 背景圖片 colorized=True, # 是否有顏色,如果為False則為黑白 save_name='code.png' # 輸出文件名 )
生成二維碼效果如下:
可以看到,這里我們二維碼包含的信息是一個(gè)網(wǎng)址,這個(gè)時(shí)候我們掃描二維碼會(huì)直接跳轉(zhuǎn)網(wǎng)頁(yè)。代碼一樣我們只需要將picture參數(shù)設(shè)置為一張動(dòng)圖,另外輸出文件后綴改為gif即可:
二、使用qrcode生成二維碼
qrcode同樣是一個(gè)便捷的工具,使用該模塊我們也能夠很快的實(shí)現(xiàn)二維碼的生成。
(1)模塊安裝
這里同樣使用pip安裝,我們?cè)诿钚写翱趫?zhí)行下列語(yǔ)句:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ qrcode
安裝完成后我們就可以開(kāi)始生成我們的第一個(gè)二維碼了:
import qrcode img = qrcode.make('http://www.baidu.com') img.save('qrcode.jpg')
在我們調(diào)用save方法后,項(xiàng)目下就會(huì)生成一張qrcode.png圖片,該圖片就是我們的二維碼圖片,我們掃出來(lái)同樣是直接跳轉(zhuǎn)網(wǎng)頁(yè)。
(2)更準(zhǔn)確的生成二維碼
除了上面的方式,我們還可以通過(guò)QRCode類來(lái)生成二維碼,這種方式我們可以控制二維碼的更多信息:
from qrcode import QRCode qr = QRCode() # 創(chuàng)建二維碼對(duì)象 qr.add_data('http://www.baidu.com') # 設(shè)置二維碼數(shù)據(jù) img = qr.make_image() # 創(chuàng)建二維碼圖片 img.save('qrcode.png') # 保存二維碼圖片
通過(guò)這種方式我們同樣可以生成一個(gè)二維碼,當(dāng)然我們還可以豐富一下:
import qrcode qr = qrcode.QRCode( version=5, # 二維碼的大小,取值1-40 box_size=10, # 二維碼最小正方形的像素?cái)?shù)量 error_correction=qrcode.constants.ERROR_CORRECT_H, # 二維碼的糾錯(cuò)等級(jí) border=5 # 白色邊框的大小 ) qr.add_data('http://www.baidu.com') # 設(shè)置二維碼數(shù)據(jù) img = qr.make_image() # 創(chuàng)建二維碼圖片 img.save('qrcode.png') # 保存二維碼
其中version包含了大小信息,當(dāng)設(shè)置為1時(shí),生成一個(gè)12x12大小的二維碼,單位為box_size個(gè)像素。
我們可以將version設(shè)置為None,并添加一句qr.make(fit=True),這樣程序會(huì)自動(dòng)生成大小合適的二維碼。
另外error_correction為糾錯(cuò)等級(jí)的設(shè)置,糾錯(cuò)等級(jí)是什么這就是關(guān)于二維碼本身的知識(shí)了。
- ERROR_CORRECT_L:大約7%或更少的錯(cuò)誤能被糾正。
- ERROR_CORRECT_M(默認(rèn)):大約15%或更少的錯(cuò)誤能被糾正。
- ROR_CORRECT_H:大約30%或更少的錯(cuò)誤能被糾正。
上面是可以供我們選擇的幾個(gè)內(nèi)置常數(shù)。
(3)讀取二維碼中的數(shù)據(jù)
上面我們一直在講如何生成二維碼,但是我們?nèi)吮旧硎菬o(wú)法讀取二維碼中的信息,這就要借助我們的設(shè)備了。在Python中,我們可以通過(guò)pyzbar模塊來(lái)識(shí)別二維碼的識(shí)別,當(dāng)然還有其它方法,這里我們使用pyzbar看看應(yīng)該如何識(shí)別二維碼,首先我們需要安裝模塊:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pyzbar
另外我們需要安裝opencv模塊:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ opencv-python
之后就可以開(kāi)始識(shí)別二維碼了:
import cv2 from pyzbar import pyzbar im = cv2.imread('qrcode.png') # 讀取二維碼 data = pyzbar.decode(im) # 解析二維碼 print(data)
我們使用如下圖片作為測(cè)試:
其中包含的信息為http://www.baidu.com,我們看一下輸出結(jié)果:
[Decoded(data=b'http://www.baidu.com', type='QRCODE', rect=Rect(left=5, top=5, width=29, height=29), polygon=[Point(x=5, y=5), Point(x=5, y=34), Point(x=34, y=34), Point(x=34, y=5)])]
顯然是我們看不懂的東西,但是我們?cè)诶锩婵吹搅薶ttp://www.baidu.com的字樣,我們可以通過(guò)如下方式解析出內(nèi)容:
import cv2 from pyzbar import pyzbar im = cv2.imread('qrcode.png') # 讀取二維碼 data = pyzbar.decode(im) # 解析二維碼 text = data[0].data.decode('utf-8') # 解析數(shù)據(jù) print(text)
輸出結(jié)果如下:
http://www.baidu.com
這樣我們就算是將內(nèi)容解析出來(lái)了。
到此這篇關(guān)于詳解Python如何生成優(yōu)雅的二維碼的文章就介紹到這了,更多相關(guān)Python生成二維碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
opencv 形態(tài)學(xué)變換(開(kāi)運(yùn)算,閉運(yùn)算,梯度運(yùn)算)
這篇文章主要介紹了opencv 形態(tài)學(xué)變換(開(kāi)運(yùn)算,閉運(yùn)算,梯度運(yùn)算),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07python 命令行傳入?yún)?shù)實(shí)現(xiàn)解析
這篇文章主要介紹了python 命令行傳入?yún)?shù)實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Dockerfile構(gòu)建一個(gè)Python Flask 鏡像
這篇文章主要介紹了Dockerfile構(gòu)建一個(gè)Python Flask 鏡像,對(duì)正在學(xué)習(xí)的你有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-01-01Python的__builtin__模塊中的一些要點(diǎn)知識(shí)
這篇文章主要介紹了Python的__builtin__模塊中的一些要點(diǎn)知識(shí),是Python學(xué)習(xí)中的基礎(chǔ),需要的朋友可以參考下2015-05-05Python將DataFrame的某一列作為index的方法
下面小編就為大家分享一篇Python將DataFrame的某一列作為index的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04解讀Python腳本的常見(jiàn)參數(shù)獲取和處理方式
這篇文章主要介紹了Python腳本的常見(jiàn)參數(shù)獲取和處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09