前言

二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来挪动设施上超风行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能示意更多的数据类型。当初的二维码随处可见,甚至有人感觉在当前的墓碑上都能够刻一个二维码,通过扫描该二维码便可知墓主传奇的毕生。所以如何疾速定制本人的二维码便显得极为的重要,本文用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编程学习圈】就能收费获取,回复关键词【学习材料】即可,抓紧时间吧!