詳解Python如何生成優(yōu)雅的二維碼
二維碼作為一種信息傳遞的工具,在當(dāng)今社會(huì)發(fā)揮了重要作用。從手機(jī)用戶登錄到手機(jī)支付,生活的各個(gè)角落都能看到二維碼的存在,那么我們?nèi)绾巫约荷梢粋€(gè)二維碼呢?如果使用Python,我們可以很快的生成一個(gè)二維碼,我們可以自己定義二維碼包含的信息。這些信息可以是文字、圖片,也可以是網(wǎng)站。下面我們就來看看如何生成一個(gè)二維碼。
一、使用MyQR生成二維碼
生成二維碼的方式多種多樣,我們先來看看使用MyQR模塊如何生成一個(gè)二維碼。
(1)模塊安裝
在開始使用之前我們需要先安裝該模塊。這里使用pip直接下載,這里選用的是國(guó)內(nèi)的源:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ myqr
安裝完成后我們就可以開始使用了。先生成一個(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,該圖片就是我們的二維碼圖片,掃出來就是我們上面設(shè)置的文本信息了。
(2)生成一個(gè)圖像二維碼
我們?nèi)粘I钪械亩S碼都比較單調(diào),有純二維碼,整個(gè)二維碼只有黑白方塊;也有帶圖片的二維碼,通常是在二維碼中心放置一個(gè)圖片,而我們現(xiàn)在要做的是一個(gè)整體是一張圖片的二維碼。也就是將一張圖片作為背景。這種二維碼實(shí)現(xiàn)起來也非常簡(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)頁。代碼一樣我們只需要將picture參數(shù)設(shè)置為一張動(dòng)圖,另外輸出文件后綴改為gif即可:

二、使用qrcode生成二維碼
qrcode同樣是一個(gè)便捷的工具,使用該模塊我們也能夠很快的實(shí)現(xiàn)二維碼的生成。
(1)模塊安裝
這里同樣使用pip安裝,我們?cè)诿钚写翱趫?zhí)行下列語句:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ qrcode
安裝完成后我們就可以開始生成我們的第一個(gè)二維碼了:
import qrcode
img = qrcode.make('http://www.baidu.com')
img.save('qrcode.jpg')
在我們調(diào)用save方法后,項(xiàng)目下就會(huì)生成一張qrcode.png圖片,該圖片就是我們的二維碼圖片,我們掃出來同樣是直接跳轉(zhuǎn)網(wǎng)頁。
(2)更準(zhǔn)確的生成二維碼
除了上面的方式,我們還可以通過QRCode類來生成二維碼,這種方式我們可以控制二維碼的更多信息:
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') # 保存二維碼圖片
通過這種方式我們同樣可以生成一個(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法讀取二維碼中的信息,這就要借助我們的設(shè)備了。在Python中,我們可以通過pyzbar模塊來識(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
之后就可以開始識(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的字樣,我們可以通過如下方式解析出內(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)容解析出來了。
到此這篇關(guān)于詳解Python如何生成優(yōu)雅的二維碼的文章就介紹到這了,更多相關(guān)Python生成二維碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言基于Socket編寫服務(wù)器端與客戶端通信的實(shí)例
這篇文章主要介紹了Go語言基于Socket編寫服務(wù)器端與客戶端通信的實(shí)例,包括實(shí)現(xiàn)基于自定義通訊協(xié)議的Socket通信,需要的朋友可以參考下2016-02-02
python3.10及以上版本編譯安裝ssl模塊的詳細(xì)過程
最近搞安裝ssl模塊每天都弄到很晚,所以這里給大家整理下,這篇文章主要給大家介紹了關(guān)于python3.10及以上版本編譯安裝ssl模塊的詳細(xì)過程,文中介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
PyCharm2019.3永久激活破解詳細(xì)圖文教程,親測(cè)可用(不定期更新)
這篇文章主要介紹了PyCharm2019.3最新激活碼(注冊(cè)碼)破解永久版詳細(xì)圖文教程的相關(guān)資料,親測(cè)可用,需要的朋友可以參考下2020-10-10
python實(shí)現(xiàn)對(duì)服務(wù)器腳本敏感信息的加密解密功能
這篇文章主要介紹了python實(shí)現(xiàn)對(duì)服務(wù)器腳本敏感信息的加密解密功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
Python?數(shù)據(jù)類型中的字符串和數(shù)字
這篇文章主要介紹了Python?數(shù)據(jù)類型中的字符串和數(shù)字,Python3中有六個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型,Number、String、List、Tuple、Set、Dictionary,加先來我們就來看看這幾種數(shù)據(jù)類型的具體相關(guān)介紹,需要的小伙伴可以參考一下2022-02-02
Python函數(shù)的參數(shù)類型和使用技巧詳解
這篇文章主要介紹了Python函數(shù)的參數(shù)類型和使用技巧詳解,函數(shù)指通過專門的代碼組織,用來實(shí)現(xiàn)特定功能的代碼段,具有相對(duì)的獨(dú)立性,可以被其他代碼重復(fù)調(diào)用,需要的朋友可以參考下2023-08-08
TensorFlow用expand_dim()來增加維度的方法
今天小編就為大家分享一篇TensorFlow用expand_dim()來增加維度的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07

