基于Python怎么编写一个二维码生成器
这篇“基于Python怎么编写一个二维码生成器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于Python怎么编写一个二维码生成器”文章吧。
1、安装第三方库
win+R,输入cmd,进入系统管理员界面,安装第三方库
pip install qrcodepip install pillow #PIL的派生分支,python3以上PIL的替代库
注:PIL是python重要的图像库,在给二维码加图片时需要用到它,但安装时出现:ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)错误。原来是python3以上该库就用其他的库(pillow)替代了
2、QRCode参数解释
version:值为1~40的整数,控制二维码的大小(最小值是1,是个12×12的矩阵)。如果想让程序自动确定,将值设置为 None,并使用 fit 参数即可。error_correction:指定二维码的容错系数,分别有以下4个系数:
ERROR_CORRECT_L: 7%的字码可被容错
ERROR_CORRECT_M: 15%的字码可被容错
ERROR_CORRECT_Q: 25%的字码可被容错
ERROR_CORRECT_H: 30%的字码可被容错
box_size:控制二维码中每个小格子包含的像素数。border:控制边框(二维码与图片边界的距离)包含的格子数(默认为4,是相关标准规定的最小值)
3、自定义二维码生成器
生成一个窗口,可以在输入框中自定义二维码的相关信息,包括想输入的文本(可以是文字或者网址),填充颜色以及背景颜色。代码如下:
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()
结果如下:
4、给二维码加图片
# 给二维码加图片 # 把颜色模式转换为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)
5、全部代码
window.mainloop()
import qrcodeimport tkinter as tkfrom 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怎么编写一个二维码生成器”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341