您好,登錄后才能下訂單哦!
這篇“基于Python怎么編寫一個(gè)二維碼生成器”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“基于Python怎么編寫一個(gè)二維碼生成器”文章吧。
win+R,輸入cmd,進(jìn)入系統(tǒng)管理員界面,安裝第三方庫
pip install qrcode pip install pillow #PIL的派生分支,python3以上PIL的替代庫
注:PIL是python重要的圖像庫,在給二維碼加圖片時(shí)需要用到它,但安裝時(shí)出現(xiàn):ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)錯(cuò)誤。原來是python3以上該庫就用其他的庫(pillow)替代了
version:值為1~40的整數(shù),控制二維碼的大小(最小值是1,是個(gè)12×12的矩陣)。如果想讓程序自動(dòng)確定,將值設(shè)置為 None,并使用 fit 參數(shù)即可。error_correction:指定二維碼的容錯(cuò)系數(shù),分別有以下4個(gè)系數(shù):
ERROR_CORRECT_L: 7%的字碼可被容錯(cuò)
ERROR_CORRECT_M: 15%的字碼可被容錯(cuò)
ERROR_CORRECT_Q: 25%的字碼可被容錯(cuò)
ERROR_CORRECT_H: 30%的字碼可被容錯(cuò)
box_size:控制二維碼中每個(gè)小格子包含的像素?cái)?shù)。border:控制邊框(二維碼與圖片邊界的距離)包含的格子數(shù)(默認(rèn)為4,是相關(guān)標(biāo)準(zhǔn)規(guī)定的最小值)
生成一個(gè)窗口,可以在輸入框中自定義二維碼的相關(guān)信息,包括想輸入的文本(可以是文字或者網(wǎng)址),填充顏色以及背景顏色。代碼如下:
if __name__ == '__main__': window = tk.Tk() window.title('二維碼生成器') window.geometry('900x600') label_url = tk.Label(window, text="輸入文本:") label_url.place(x=50, y=40) Entry_input_url = tk.Entry() Entry_input_url.place(x=120, y=40) label_fill_color = tk.Label(window, text="填充顏色:") label_fill_color.place(x=50, y=80) Entry_input_fill_color = tk.Entry() Entry_input_fill_color.place(x=120, y=80) label_fill_color = tk.Label(window, text="背景顏色:") label_fill_color.place(x=50, y=120) Entry_input_back_color = tk.Entry() Entry_input_back_color.place(x=120, y=120) button = tk.Button(window, text='開始生成', command=create_code) button.place(x=140, y=160) window.mainloop()
結(jié)果如下:
# 給二維碼加圖片 # 把顏色模式轉(zhuǎn)換為RGBA,它表示帶透明度掩模的真彩色 img = img.convert("RGBA") # 從文件里加載二維碼中心logo圖片,用Image函數(shù)的open方法 icon = Image.open("2.jpg") # 得出二維碼的寬高 img_w, img_h = img.size factor = 4 # 通過二維碼寬高計(jì)算出logo圖片寬和高的最大限度 size_w = int(img_w / factor) size_h = int(img_h / factor) # 獲取logo的寬和高 icon_w, icon_h = icon.size # 比較logo寬高和最大限度寬高,如果超過最大限度就將logo尺寸調(diào)整到最大限度 if icon_w > size_w: icon_w = size_w if icon_h > size_h: icon_h = size_h icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS) # 根據(jù)logo和圖片的長寬確定logo的位置 w = int((img_w - icon_w) / 2) h = int((img_h - icon_h) / 2) icon = icon.convert("RGBA") # 將logo圖片粘貼到二維碼的指定位置 img.paste(icon, (w, h), icon)
window.mainloop()
import qrcode import tkinter as tk from PIL import Image def create_code(): content = Entry_input_url.get() fill_color = Entry_input_fill_color.get() back_color = Entry_input_back_color.get() qr = qrcode.QRCode( version=2, # 二維碼的邊長 # ERROR_CORRECT_H: 30%的字碼可被容錯(cuò),因?yàn)椴迦肓藞D片,所以增加容錯(cuò)率 error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=6, border=2, ) qr.make(fit=True) qr.add_data(content) img = qr.make_image(fill_color=fill_color, back_color=back_color) # 給二維碼加圖片 # 把顏色模式轉(zhuǎn)換為RGBA,它表示帶透明度掩模的真彩色 img = img.convert("RGBA") # 從文件里加載二維碼中心logo圖片,用Image函數(shù)的open方法 icon = Image.open("2.jpg") # 得出二維碼的寬高 img_w, img_h = img.size factor = 4 # 通過二維碼寬高計(jì)算出logo圖片寬和高的最大限度 size_w = int(img_w / factor) size_h = int(img_h / factor) # 獲取logo的寬和高 icon_w, icon_h = icon.size # 比較logo寬高和最大限度寬高,如果超過最大限度就將logo尺寸調(diào)整到最大限度 if icon_w > size_w: icon_w = size_w if icon_h > size_h: icon_h = size_h icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS) # 根據(jù)logo和圖片的長寬確定logo的位置 w = int((img_w - icon_w) / 2) h = int((img_h - icon_h) / 2) icon = icon.convert("RGBA") # 將logo圖片粘貼到二維碼的指定位置 img.paste(icon, (w, h), icon) # 保存二維碼 img.save("qr.png") photo = tk.PhotoImage(file="qr.png") Label_img = tk.Label(window, image=photo) Label_img.place(x=300, y=300) if __name__ == '__main__': window = tk.Tk() window.title('二維碼生成器') window.geometry('900x600') label_url = tk.Label(window, text="輸入文本:") label_url.place(x=50, y=40) Entry_input_url = tk.Entry() Entry_input_url.place(x=120, y=40) label_fill_color = tk.Label(window, text="填充顏色:") label_fill_color.place(x=50, y=80) Entry_input_fill_color = tk.Entry() Entry_input_fill_color.place(x=120, y=80) label_fill_color = tk.Label(window, text="背景顏色:") label_fill_color.place(x=50, y=120) Entry_input_back_color = tk.Entry() Entry_input_back_color.place(x=120, y=120) button = tk.Button(window, text='開始生成', command=create_code) button.place(x=140, y=160)
以上就是關(guān)于“基于Python怎么編寫一個(gè)二維碼生成器”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。