基于Python編寫一個(gè)二維碼生成器
前言
二維碼又稱二維條碼,常見的二維碼為QR Code,QR全稱Quick Response,是一個(gè)近幾年來移動設(shè)備上超流行的一種編碼方式,它比傳統(tǒng)的Bar Code條形碼能存更多的信息,也能表示更多的數(shù)據(jù)類型?,F(xiàn)在的二維碼隨處可見,甚至有人覺得在以后的墓碑上都可以刻一個(gè)二維碼,通過掃描該二維碼便可知墓主傳奇的一生。所以如何快速定制自己的二維碼便顯得極為的重要,本文用python生成一個(gè)簡單的二維碼生成器,該生成器可以定制二維碼的背景、填充顏色以及二維碼中間的背景圖片。
1、安裝第三方庫
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)替代了
2、QRCode參數(shù)解釋
version:值為1~40的整數(shù),控制二維碼的大?。ㄗ钚≈凳?,是個(gè)12×12的矩陣)。如果想讓程序自動確定,將值設(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ī)定的最小值)
3、自定義二維碼生成器
生成一個(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é)果如下:
4、給二維碼加圖片
#?給二維碼加圖片 ????#?把顏色模式轉(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)
5、全部代碼
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è)二維碼生成器的文章就介紹到這了,更多相關(guān)Python二維碼生成器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python將字符串list寫入excel和txt的實(shí)例
今天小編就為大家分享一篇python將字符串list寫入excel和txt的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python實(shí)現(xiàn)時(shí)鐘顯示效果思路詳解
這篇文章主要介紹了Python實(shí)現(xiàn)時(shí)鐘顯示,需要的朋友可以參考下2018-04-04python中的循環(huán)結(jié)構(gòu)問題
這篇文章主要介紹了python中的循環(huán)結(jié)構(gòu)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03Pytorch深度學(xué)習(xí)addmm()和addmm_()函數(shù)用法解析
這篇文章主要為大家介紹了Pytorch中addmm()和addmm_()函數(shù)用法解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06python正向最大匹配分詞和逆向最大匹配分詞的實(shí)例
今天小編就為大家分享一篇python正向最大匹配分詞和逆向最大匹配分詞的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11python識別圖像并提取文字的實(shí)現(xiàn)方法
這篇文章主要介紹了python識別圖像并提取文字的實(shí)現(xiàn)方法,2019-06-06Python SVM(支持向量機(jī))實(shí)現(xiàn)方法完整示例
這篇文章主要介紹了Python SVM(支持向量機(jī))實(shí)現(xiàn)方法,結(jié)合完整實(shí)例形式分析了基于Python實(shí)現(xiàn)向量機(jī)SVM算法的具體步驟與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-06-06解決Python報(bào)錯(cuò):ValueError:operands?could?not?be?broadcast?t
這篇文章主要給大家介紹了關(guān)于解決Python報(bào)錯(cuò):ValueError:operands?could?not?be?broadcast?together?with?shapes的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02