用Python制作一个二维码生成器

火星殖民
• 阅读 1257

前言

二维码又称二维条码,常见的二维码为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)替代了

用Python制作一个二维码生成器

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()

结果如下:

用Python制作一个二维码生成器

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编程学习圈】就能免费获取,回复关键词【学习资料】即可,抓紧时间吧!

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
UIWebView长按保存图片和识别图片二维码的实现方案(使用缓存)
0x00需求:长按识别UIWebView中的二维码,如下图长按识别二维码0x01方案1:给UIWebView增加一个长按手势,激活长按手势时获取当前UIWebView的截图,分析是否包含二维码。核心代码:略优点:流程简单,可以快速实现。不足:无法实现保存UIWebView中图片,如果当前We
不是海碗 不是海碗
2年前
小白也能看懂的二维码生成器 API 的技术原理(附Java 接入代码)
二维码生成器API是利用是一种通过Web服务将文本、链接、图像等信息转化为二维码图像的技术
Karen110 Karen110
4年前
手把手教你用Python打造一款属于你自己的个性二维码
/前言/在现代社会中,我们出行坐公交经常会看到二维码,支付宝微信收款也会有二维码扫一扫,那么这些二维码是怎样生成的了,今天我们不研究二维码的原理,只教大家如何制作属于自己的二维码。/项目目标/自己用程序打造一款属于自己的个性二维码。/项目准备/编辑器:sublimetext3  浏览器:360浏览器  模块:MyQR/实现步骤/
不是海碗 不是海碗
2年前
一文带你看透二维码生成器
二维码生成器是一种用于生成二维码的工具。它可以将用户提供的信息编码成二维码,包括文字、链接、电话号码、邮件地址、地图等等。
Stella981 Stella981
3年前
Python 生成个性二维码
1.1实验内容本课程通过调用MyQR接口来实现生成个人所需二维码,并可以设置二维码的大小、是否在现有图片的基础上生成、是否生成动态二维码。本课程主要面向Python3初学者。1.2知识点Python3基础MyQR库1.3效果截图1.3.1普通二维码!11.31
Stella981 Stella981
3年前
Android下谷歌zxing二维码的最大容量
使用谷歌的zxing,发现是有最大长度的。超过一定长度,将无法生成像素矩阵,为null,于是也就不能生成二维码了。记录:jar版本:3.2.1手机:联想A808t系统:4.4.2文本编码:"utf8",二维码图片编码:BarcodeFormat.QR\_CODE能生成的的汉字只有449个;能生成的数字有1852个能生成
wnm wnm
3年前
万能码的作用你想不到(安全扫码专业委员会)
万能码的作用你想不到(安全扫码专业委员会)大家都非常熟悉二维码,二维码又会给你带来什么呢?随着智能手机市场的不断发展,科技不断进步,二维码应运而生,手机二维码营销得到推广。例如在某些商场使用二维码扫描之后可以打折优惠;利用二维码进行点餐等等。二维码与数字的结合,不少商家通过二维码与数字结合起来,通过二维码后完成购买的营销模式。但是它也存在着弊端,市面上二维码
wnm wnm
3年前
万能码,你的启明星(安全扫码专业委员会)
万能码,你的启明星(安全扫码专业委员会)在5G时代,大数据是一种趋势,是一种潮流,更是一种发展方向,各行各业都有许多的数字化改革和建设,而二维码就是其中的佼佼者,自从二维码横空出世,就获得了开始了它发展凶猛的势头,并且越来越烈,到如今已经成为了家家户户必备的用品,例如,加微信好友,扫描二维码;登录电脑,扫码二维码;支付结账,扫描二维码;饭店点餐,扫码二维码等
wnm wnm
3年前
选择万能码不后悔(安全扫码专业委员会)
选择万能码不后悔(安全扫码专业委员会)万能码以一个简单的方式出现在大众眼前。二维码的普及率可以说是非常高了,大街上肉眼可见的二维码,不论是在商场上,还是在小商贩、餐馆、街头小推车上都有二维码的出现,因此它的可接受度是非常高的,因此从形式上采取扫描二维码的形式是非常好的一个决定。其次扫码进去平台,平台自带流量,让三方获利,实现互利共赢,无论是连接WiFi也好,
不是海碗 不是海碗
2年前
一口气整理三种不同二维码生成的Java 接入代码
引言二维码已经成为现代社会中广泛应用的一种工具,它们具有快速、可靠和高容量的信息传递能力。通过扫描二维码,用户可以轻松获取网址、产品信息、支付链接等各种信息。本文将介绍二维码生成器API作为一种工具,并探讨其功能和用法,包括普通二维码生成、带图片的艺术二维
使用Python生成二维码
1、背景上一次我们介绍了什么是二维码,读过这篇文章以后,相信大家对二维码已经有了一定的认识,那么有没有想过如何自己动手生成二维码呢?二维码在我们的生活与工作中,都能够做什么呢?今天我们来探讨一下用Python如何生成二维码。2、使用哪些库Python具有丰