用Python的qrcode包來生成二維碼很簡單
一槐脏、前期準(zhǔn)備:
- pip install qrcode
qrcode 依賴 Image 這個包:
- pip install Image
二甲葬、安裝好之后就可以通過代碼實現(xiàn)二維碼了
- 1. 簡單生成二維碼:
import qrcode //模塊導(dǎo)入
//調(diào)用qrcode的make()方法傳入url或者想要展示的內(nèi)容
img = qrcode.make('http://www.baidu.com')
//寫入文件
with open('test.png', 'wb') as f:
img.save(f)
生成的二維碼:
text.png
import qrcode //模塊導(dǎo)入
//調(diào)用qrcode的make()方法傳入url或者想要展示的內(nèi)容
img = qrcode.make('歡迎來到我的簡書')
//保存
img.save("text.png")
生成的二維碼:
text.png
此處并沒有使用add_data()添加數(shù)據(jù)生巡,make_image()生成二維碼,而是使用qrcode.make(data)的方式獲取im對象摹迷。qrcode.make()是qrcode提供簡單調(diào)用接口疟赊。
- 2. 正常生成二維碼的步驟:
- 創(chuàng)建QRCode對象
- add_data()添加數(shù)據(jù)
- make_image()創(chuàng)建二維碼(返回im類型的圖片對象)
- 自動打開圖片,im.show()
- 3. QRCode參數(shù)詳細(xì)說明:
- version: 一個整數(shù)峡碉,范圍為1到40近哟,表示二維碼的大小(最小值是1鲫寄,是個12×12的矩陣)吉执,如果想讓程序自動生成,將值設(shè)置為 None 并使用 fit=True 參數(shù)即可地来。
- error_correction: 二維碼的糾錯范圍戳玫,可以選擇4個常量:
··1. ERROR_CORRECT_L 7%以下的錯誤會被糾正
··2. ERROR_CORRECT_M (default) 15%以下的錯誤會被糾正
··3. ERROR_CORRECT_Q 25 %以下的錯誤會被糾正
··4. ERROR_CORRECT_H. 30%以下的錯誤會被糾正 - boxsize: 每個點(diǎn)(方塊)中的像素個數(shù)
- border: 二維碼距圖像外圍邊框距離,默認(rèn)為4未斑,而且相關(guān)規(guī)定最小為4
4. 參數(shù)配置后生成自定制二維碼
import qrcode
data = 'http://www.baidu.com/'
img_file = r'保存路徑'
# 實例化QRCode生成qr對象
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4
)
# 傳入數(shù)據(jù)
qr.add_data(data)
qr.make(fit=True)
# 生成二維碼
img = qr.make_image()
# 保存二維碼
img.save(img_file)
# 展示二維碼
img.show()
三咕宿、額外添加
往往我們看到的二維碼中間都有一張圖片或者用戶頭像,如何才能生成這樣一張二維碼蜡秽?
利用PIL庫中image模塊的paste函數(shù)
img.paste(path,where,mask=None)
其中府阀,img為image對象;path為所添加圖片芽突;where為tuple,如:(x,y)试浙,表示圖片所在二維碼的橫縱坐標(biāo)
import qrcode
from PIL import Image
import matplotlib.pyplot as plt
def getQRcode(data, file_name):
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=5,
border=4,
)
# 添加數(shù)據(jù)
qr.add_data(data)
# 填充數(shù)據(jù)
qr.make(fit=True)
# 生成圖片
img = qr.make_image(fill_color="green", back_color="white")
# 添加logo,打開logo照片
icon = Image.open("1.jpg")
# 獲取圖片的寬高
img_w, img_h = img.size
# 參數(shù)設(shè)置logo的大小
factor = 6
size_w = int(img_w / factor)
size_h = int(img_h / factor)
icon_w, icon_h = icon.size
if icon_w > size_w:
icon_w = size_w
if icon_h > size_h:
icon_h = size_h
# 重新設(shè)置logo的尺寸
icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
# 得到畫圖的x寞蚌,y坐標(biāo)田巴,居中顯示
w = int((img_w - icon_w) / 2)
h = int((img_h - icon_h) / 2)
# 黏貼logo照
img.paste(icon, (w, h), mask=None)
# 終端顯示圖片
plt.imshow(img)
plt.show()
# 保存img
img.save(file_name)
return img
if __name__ == '__main__':
getQRcode("世情薄,人情惡挟秤,雨送黃昏花易落壹哺。曉風(fēng)干,淚痕殘煞聪,欲箋心事斗躏,獨(dú)語斜闌逝慧。"
"難昔脯,難啄糙,難!人成各云稚,今非昨隧饼,病魂常似秋千索。角聲寒静陈,夜闌珊燕雁,怕人尋問,咽淚裝歡鲸拥。瞞拐格,瞞,瞞刑赶!", 'my.png')
最后捏浊,送你一首宋詞,掃碼免費(fèi)得W策丁=鹱佟!
my.png