好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

基于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编写一个二维码生成器的详细内容...

  阅读:54次