<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
二維條碼又稱二維條碼,常見的二維條碼為QR Code,QR全稱Quick Response,是一個近幾年來移動裝置上超流行的一種編碼方式,它比傳統的Bar Code條形碼能存更多的資訊,也能表示更多的資料型別。現在的二維條碼隨處可見,甚至有人覺得在以後的墓碑上都可以刻一個二維條碼,通過掃描該二維條碼便可知墓主傳奇的一生。所以如何快速客製化自己的二維條碼便顯得極為的重要,本文用python生成一個簡單的二維條碼生成器,該生成器可以客製化二維條碼的背景、填充顏色以及二維條碼中間的背景圖片。
win+R,輸入cmd,進入系統管理員介面,安裝第三方庫
pip install qrcode pip install pillow #PIL的派生分支,python3以上PIL的替代庫
注:PIL是python重要的影象庫,在給二維條碼加圖片時需要用到它,但安裝時出現:ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)錯誤。原來是python3以上該庫就用其他的庫(pillow)替代了
version:值為1~40的整數,控制二維條碼的大小(最小值是1,是個12×12的矩陣)。如果想讓程式自動確定,將值設定為 None,並使用 fit 引數即可。error_correction:指定二維條碼的容錯係數,分別有以下4個係數:
box_size:控制二維條碼中每個小格子包含的畫素數。border:控制邊框(二維條碼與圖片邊界的距離)包含的格子數(預設為4,是相關標準規定的最小值)
生成一個視窗,可以在輸入框中自定義二維條碼的相關資訊,包括想輸入的文字(可以是文字或者網址),填充顏色以及背景顏色。程式碼如下:
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()
結果如下:
# 給二維條碼加圖片 # 把顏色模式轉換為RGBA,它表示帶透明度掩模的真彩色 img = img.convert("RGBA") # 從檔案裡載入二維條碼中心logo圖片,用Image函數的open方法 icon = Image.open("2.jpg") # 得出二維條碼的寬高 img_w, img_h = img.size factor = 4 # 通過二維條碼寬高計算出logo圖片寬和高的最大限度 size_w = int(img_w / factor) size_h = int(img_h / factor) # 獲取logo的寬和高 icon_w, icon_h = icon.size # 比較logo寬高和最大限度寬高,如果超過最大限度就將logo尺寸調整到最大限度 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) # 根據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%的字碼可被容錯,因為插入了圖片,所以增加容錯率 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) # 給二維條碼加圖片 # 把顏色模式轉換為RGBA,它表示帶透明度掩模的真彩色 img = img.convert("RGBA") # 從檔案裡載入二維條碼中心logo圖片,用Image函數的open方法 icon = Image.open("2.jpg") # 得出二維條碼的寬高 img_w, img_h = img.size factor = 4 # 通過二維條碼寬高計算出logo圖片寬和高的最大限度 size_w = int(img_w / factor) size_h = int(img_h / factor) # 獲取logo的寬和高 icon_w, icon_h = icon.size # 比較logo寬高和最大限度寬高,如果超過最大限度就將logo尺寸調整到最大限度 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) # 根據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)
到此這篇關於基於Python編寫一個二維條碼生成器的文章就介紹到這了,更多相關Python二維條碼生成器內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45