Python實(shí)現(xiàn)生成帶logo背景圖的二維碼
前言
二維碼簡(jiǎn)稱 QR Code(Quick Response Code),學(xué)名為快速響應(yīng)矩陣碼,是二維條碼的一種,由日本的 Denso Wave 公司于 1994 年發(fā)明?,F(xiàn)隨著智能手機(jī)的普及,已廣泛應(yīng)用于平常生活中,例如商品信息查詢、社交好友互動(dòng)、網(wǎng)絡(luò)地址訪問等等。
盡管二維碼應(yīng)用漸趨廣泛,但與日韓等國相比,中國的二維碼發(fā)展還遠(yuǎn)遠(yuǎn)不夠。制約因素除了運(yùn)營(yíng)商的支持度外,還有技術(shù)、終端適配、盈利模式等方面。炒得很火熱的是二維碼與O2O(Online To Offline)模式的結(jié)合,即利用二維碼的讀取將線上的用戶引流給線下的商家。騰訊很看好這個(gè)模式,馬化騰稱"二維碼是線上線下的一個(gè)關(guān)鍵入口"。盡管有些人不看好二維碼的應(yīng)用,但無可否認(rèn),只要培養(yǎng)了足夠多的用戶群,再結(jié)合良好的商業(yè)模式,二維碼將成為橋接現(xiàn)實(shí)與虛擬最得力的工具之一。
Python代碼是怎么生成二維碼的
這里介紹兩種方法:
1、qrcode模塊
qrcode模塊是Github上的一個(gè)開源項(xiàng)目,提供了生成二維碼的接口。qrcode默認(rèn)使用PIL庫用于生成圖像。由于生成 qrcode 圖片需要依賴 Python 的圖像庫,所以需要先安裝 Python 圖像庫 PIL(Python Imaging Library)。
2、MyQR模塊
MyQR是一個(gè)能夠產(chǎn)生基本二維碼、藝術(shù)二維碼(黑白與彩色)和動(dòng)態(tài)效果二維碼(黑白與彩色)的Python第三方庫。
MyQR 庫的更多介紹和源碼訪問 ?? ?https://github.com/x-hw/amazing-qr
模塊安裝問題
運(yùn)行代碼報(bào)錯(cuò):ModuleNotFoundError: No module named ‘MyQR’
pip install MyQR

qrcode模塊生成的二維碼

注意:logo圖不要
太大,不然生成之后logo可能會(huì)擋住二維碼的內(nèi)容,導(dǎo)致掃不出來。
下面看實(shí)現(xiàn)代碼:
from PIL import Image
import qrcode, os
def create_qrcode(url, qrcodename):
qr = qrcode.QRCode(
version=1, # 設(shè)置容錯(cuò)率為最高
error_correction=qrcode.ERROR_CORRECT_H, # 用于控制二維碼的錯(cuò)誤糾正程度
box_size=8, # 控制二維碼中每個(gè)格子的像素?cái)?shù),默認(rèn)為10
border=1, # 二維碼四周留白,包含的格子數(shù),默認(rèn)為4
)
qr.add_data(url) # QRCode.add_data(data)函數(shù)添加數(shù)據(jù)
qr.make(fit=True) # QRCode.make(fit=True)函數(shù)生成圖片
img = qr.make_image()
img = img.convert("RGBA") # 二維碼設(shè)為彩色
logo = Image.open("images/逃逸的卡路里.png") # 傳gif生成的二維碼也是沒有動(dòng)態(tài)效果的
w,h = img.size
logo_w,logo_h = logo.size
l_w = int((w - logo_w) / 2)
l_h = int((h - logo_h) / 2)
logo = logo.convert("RGBA")
img.paste(logo, (l_w, l_h), logo)
img.show()
img.save(os.getcwd() + "/images/" + qrcodename + ".png", quality=100)
def main():
url = input("請(qǐng)輸入文本或URL:")
qrcodename = input("請(qǐng)輸入生成二維碼的名稱:")
create_qrcode(url,qrcodename)
if __name__ == '__main__':
main()
| 參數(shù)詳解 | |
|---|---|
| version=None | 一個(gè)整數(shù),范圍為1到40,表示二維碼的大小(最小值是1,是個(gè)12×12的矩陣),如果想讓程序自動(dòng)生成,將值設(shè)置為 None 并使用 fit=True 參數(shù)即可 |
| error_correction=constants.ERROR_CORRECT_M | 二維碼的糾錯(cuò)范圍,可以選擇4個(gè)常量:1. ERROR_CORRECT_L 7%以下的錯(cuò)誤會(huì)被糾正2. ERROR_CORRECT_M (default) 15%以下的錯(cuò)誤會(huì)被糾正3. ERROR_CORRECT_Q 25 %以下的錯(cuò)誤會(huì)被糾正4. ERROR_CORRECT_H. 30%以下的錯(cuò)誤會(huì)被糾正 |
| box_size=10 | 控制二維碼中每個(gè)小格子包含的像素?cái)?shù) |
| border=4 | 控制邊框(二維碼與圖片邊界的距離)包含的格子數(shù)(默認(rèn)為4,是相關(guān)標(biāo)準(zhǔn)規(guī)定的最小值) |
| image_factory=None | 選擇生成圖片的形式,默認(rèn)為PIL圖像 |
| mask_pattern=None | 選擇生成圖片的的掩模 |
MyQR模塊生成靜態(tài)或動(dòng)態(tài)背景的二維碼
from MyQR import myqr
import os
text = input("請(qǐng)輸入文本或url:")
save_name = input("請(qǐng)輸入生成二維碼的名稱:")+".png"
myqr.run(
words=text, #在命令后輸入鏈接或者句子作為參數(shù),然后在程序的當(dāng)前目錄中產(chǎn)生相應(yīng)的二維碼圖片文件,默認(rèn)命名為” qrcode.png“
version=1, #設(shè)置容錯(cuò)率為最高默認(rèn)邊長(zhǎng)是取決于你輸入的信息的長(zhǎng)度和使用的糾錯(cuò)等級(jí);而默認(rèn)糾錯(cuò)等級(jí)是最高級(jí)的H
level='H', #控制糾錯(cuò)水平,范圍是L、M、Q、H,從左到右依次升高
picture="images/逃逸的卡路里.png", #用來將QR二維碼圖像與一張同目錄下的圖片相結(jié)合,產(chǎn)生一張黑白圖片
colorized=True, #可以使產(chǎn)生的圖片由黑白(False)變?yōu)椴噬?True)的
contrast=1.0, #用以調(diào)節(jié)圖片的對(duì)比度,1.0 表示原始圖片,更小的值表示更低對(duì)比度,更大反之。默認(rèn)為1.0。
brightness=1.0, #用來調(diào)節(jié)圖片的亮度,其余用法和取值與 -con 相同
save_name=save_name, #控制文件名,格式可以是 .jpg, .png ,.bmp ,.gif ;
save_dir=os.getcwd() + "/images/"
)
參數(shù):
- words:文本或鏈接
- version:改變生成二維碼圖片的大??;范圍(1~40)
- picture: 指定生成二維碼的背景圖
- colorized:只有兩個(gè)參數(shù),True為彩色,F(xiàn)lase為灰色
- level :范圍只有:‘L’,‘M’,‘Q’,‘H’;控制糾錯(cuò)水平
- contrast :調(diào)節(jié)背景圖片的對(duì)比度,只能給予float類型的參數(shù)
- brightness:調(diào)節(jié)背景圖片的亮度,如果參數(shù)值過大,背景圖將會(huì)變?yōu)榘咨?;只能給予float類型的參數(shù)
- save_name:保存的格式只有:’.jpg’,‘.png’, ‘.bmp’, '.gif’等四種格式,路徑可以使用絕對(duì)路徑和相對(duì)路徑。
- save_dir:存儲(chǔ)路徑
動(dòng)態(tài)圖展示

總結(jié)
以上就是Python代碼對(duì)二維碼生成處理的示例,根據(jù)不同需求可以選擇qrcode模塊或者M(jìn)yQR模塊來實(shí)現(xiàn),希望對(duì)看到的小伙伴有幫助作用。
到此這篇關(guān)于Python實(shí)現(xiàn)生成帶logo背景圖的二維碼的文章就介紹到這了,更多相關(guān)Python生成二維碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python計(jì)算寄送包裹重量的實(shí)現(xiàn)過程
要實(shí)現(xiàn)這樣一個(gè)需求寄送包裹小于5kg,每公斤0.5元,大于等于5kg,超出5公斤部分,按照每公斤0.8元計(jì)算,輸入重量,輸出應(yīng)付金額,下面小編給大家分享實(shí)現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧2022-02-02
python3 中文亂碼與默認(rèn)編碼格式設(shè)定方法
今天小編就為大家分享一篇python3 中文亂碼與默認(rèn)編碼格式設(shè)定方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10
python使用prettytable內(nèi)置庫美化輸出表格
這篇文章主要介紹了python使用prettytable內(nèi)置庫美化輸出表格,prettytable是pyhton內(nèi)置庫,文章圍繞主題的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06
jupyter notebook 調(diào)用環(huán)境中的Keras或者pytorch教程
這篇文章主要介紹了jupyter notebook 調(diào)用環(huán)境中的Keras或者pytorch教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
OpenCV半小時(shí)掌握基本操作之角點(diǎn)檢測(cè)
這篇文章主要介紹了OpenCV基本操作之角點(diǎn)檢測(cè),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
python爬蟲之爬取谷歌趨勢(shì)數(shù)據(jù)
這篇文章主要介紹了python爬蟲之爬取谷歌趨勢(shì)數(shù)據(jù),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python爬蟲的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
DjangoRestFramework 使用 simpleJWT 登陸認(rèn)證完整記錄
Djangorestframework-simplejwt是Django REST Framework框架的一個(gè)jwt插件,使用 python http 工具進(jìn)行接口測(cè)試的方法文中給大家提到,重點(diǎn)給大家分享djangorestframework-simplejwt 使用記錄及登陸認(rèn)證的完成過程,感興趣的朋友跟隨小編一起看看吧2021-06-06

