基于Python编写一个二维码生成器

 更新时间:2022年06月07日 09:31:19   作者:Python编程学习圈  
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式。本文将利用python生成一个简单的二维码生成器,需要的可以参考一下

前言

二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。现在的二维码随处可见,甚至有人觉得在以后的墓碑上都可以刻一个二维码,通过扫描该二维码便可知墓主传奇的一生。所以如何快速定制自己的二维码便显得极为的重要,本文用python生成一个简单的二维码生成器,该生成器可以定制二维码的背景、填充颜色以及二维码中间的背景图片。

1、安装第三方库

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)替代了

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 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二维码生成器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python requests库参数提交的注意事项总结

    Python requests库参数提交的注意事项总结

    这篇文章主要给大家介绍了关于Python requests库参数提交的注意事项,文中通过示例代码和图片介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 如何在Windows下载、安装Python和配置环境(新手、保姆级教程)

    如何在Windows下载、安装Python和配置环境(新手、保姆级教程)

    本文详细介绍了如何在Windows系统上下载、安装Python以及配置环境变量,通过步骤说明,即使是新手也能顺利完成Python的安装,并验证其是否成功,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • python中Django文件上传方法详解

    python中Django文件上传方法详解

    在本篇文章里小编给大家整理了一篇关于python中Django文件上传方法,有兴趣的朋友们可以学习下。
    2020-08-08
  • 探讨python  pandas.DataFrame.to_json 函数

    探讨python  pandas.DataFrame.to_json 函数

    这篇文章主要介绍了python  pandas.DataFrame.to_json 函数示例详解,to_json 函数提供了灵活的参数设置,使得 pandas 数据框能够以多种格式导出为 JSON 文件,需要的朋友可以参考下
    2024-07-07
  • python实现数组平移K位问题

    python实现数组平移K位问题

    这篇文章主要介绍了python实现数组平移K位问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python实现随机分层抽样的示例详解

    Python实现随机分层抽样的示例详解

    在数据分析与机器学习的实践中,抽样是不可或缺的一步,分层抽样作为一种常用的抽样方法,能够确保样本在不同类别中的比例与总体一致,下面我们看看如何使用Python实现随机分层抽样吧
    2024-11-11
  • Python之Pygame的Event事件模块

    Python之Pygame的Event事件模块

    这篇文章主要介绍了Pygame的Event事件模块,事件(Event)是 Pygame 的重要模块之一,它是构建整个游戏程序的核心,Pygame 定义了一个专门用来处理事件的结构,即事件队列,本文有一定参考价值,感兴趣的同学可以阅读参考
    2023-04-04
  • python 文件操作删除某行的实例

    python 文件操作删除某行的实例

    下面小编就为大家带来一篇python 文件操作删除某行的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Python turtle绘图教程之七段数码管显示数字和字母

    Python turtle绘图教程之七段数码管显示数字和字母

    这篇文章主要给大家介绍了关于Python turtle绘图教程之七段数码管显示数字和字母的相关资料,Python是一种流行的编程语言,可用于编写各种类型的程序,在数码管显示器上数字8由7条不同的线条组成,需要的朋友可以参考下
    2023-10-10
  • Python多线程实现支付模拟请求过程解析

    Python多线程实现支付模拟请求过程解析

    这篇文章主要介绍了python多线程实现支付模拟请求过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04

最新评论