2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Python二维码生成器

Python二维码生成器

时间:2019-12-12 23:33:09

相关推荐

Python二维码生成器

二维码是我们生活中非常常用的东西,几乎无处不在,你可以通过二维码支付,传输数据,传输文本等。但想要生成自己的二维码又非常麻烦,需要用别人的软件,这些很多不可靠甚至有病毒,所以作为技术人员的我们还是要靠自己

先说一下二维码的原理

二维码的原理是二进制运算,总的来说,二维码利用二进制的0和1作为代码,同时使用若干个与二进制相对应的几何形体表示文字数值信息。使用代表正方形的黑白格来记录信息,并且可以在水平和竖直方向上进行编码。

摘自/question/2551.html

众所周知,Python被称为胶水语言,因为它可以将多种语言串联起来,同时非常多的第三方库可以让我们的开发变得更轻松,这里我们要用到的库是qrcode

安装方法

pip install qrcode

另外还要安装PIL库,安装方法

pip install PIL

qrcode

简单用法

import qrcodeimg = qrcode.make(string)img.save(filename)

string是你要加入的文本,也可以是url等

filename是保存的文件名,要带后缀(jpg/png)

例如

import qrcodeimg=qrcode.make("qrcode简单用法")img.save("1.png")

当然,我们也可以通过qrcode对象来创建二维码

例如

import qrcodeqr=qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_H,box_size=10,border=5)qr.add_data("创建QRCode对象")qr.make(fit=True)img=qr.make_image()img.save('2.png')

参数介绍

version : 控制二维码的大小,取值范围从1到40。取最小值1时,二维码大小为21*21。取值为 None (默认)或者使用fit=true参数(默认)时,二维码会自动调整大小。

error_correction : 控制二维码纠错级别。

box_size:控制二维码中每个格子的像素数,默认为 10。

border:控制二维码四周留白包含的格子数,默认为4。

image_factory:选择生成图片的形式,默认为 PIL 图像。

mask_pattern:选择生成图片的的掩模。

运行结果:

设置背景颜色和二维码颜色

我们可以更改背景颜色和二维码颜色,例如

import qrcodeqr=qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_H,box_size=10,border=5)qr.add_data("更改二维码颜色和背景颜色的二维码")qr.make(fit=True)img=qr.make_image(fill_color='#f9127d',back_color='#8d75d6')img.save('3.png')

我们在QRCode对象的make_image方法中传入了fill_color和back_color两个参数,这两个参数可以设置二维码颜色和背景颜色,这里可以用16进制颜色

运行结果

其他的用法大家可以自行去了解

接下来让我们用GUI和qrcode结合起来,做一个简单的二维码生成器

实战

GUI

我这里随便写了一个简单的GUI,代码如下

from tkinter import *from tkinter import messageboxdef attention():messagebox.showinfo('提示','输入二维码内容及\n保存的文件名(要加后缀,例如 test.jpg)后\n按下生成即可\n')def inspection():passroot = Tk()root.title('二维码生成器')root.geometry('340x200+610+240')lable = Label(root,text='请输入生成二维码的内容',font=('微软雅黑',15))lable.grid(sticky=W)entry = Entry(root,font=('微软雅黑',20))entry.grid()lable2 = Label(root,text='请输入保存文件名,要加后缀(jpg/png)',font=('微软雅黑',15))lable2.grid(sticky=W)entry2 = Entry(root,font=('微软雅黑',20))entry2.grid()button = Button(root,text='生成',font=('微软雅黑',20),fg='red',command=inspection)button.grid(sticky=W)button2 = Button(root,text='注意',font=('微软雅黑',20),command=attention)button2.grid(row=4,sticky=E)root.mainloop()

这代码是我很久以前写的,我也懒得重新改了,但还是能看的懂得

这里我们定义了一个检验方法,进行简单的检验,代码如下

def inspection():string = entry.get()file = entry2.get()list = file.strip().split('.')try:if string.strip() != '' and (list[1]=='jpg' or list[1]=='png'):made(string,file)else:messagebox.showerror('错误','输入错误')except IndexError:messagebox.showerror('错误','请输入正确的文件名')

接下来我们定义一个made方法,来进行二维码的生成和保存

def made(string,filename):if not os.path.exists('images'):os.mkdir('images')os.chdir('images')img = qrcode.make(string)img.save(filename)messagebox.showinfo('提示','%s保存成功'%filename)os.chdir('..')

完整代码如下

# -*- encoding = utf-8 -*-import qrcodefrom tkinter import *from tkinter import messageboximport osdef made(string,filename):if not os.path.exists('images'):os.mkdir('images')os.chdir('images')img = qrcode.make(string)img.save(filename)messagebox.showinfo('提示','%s保存成功'%filename)os.chdir('..')def inspection():string = entry.get()file = entry2.get()list = file.strip().split('.')try:if string.strip() != '' and (list[1]=='jpg' or list[1]=='png'):made(string,file)else:messagebox.showerror('错误','输入错误')except IndexError:messagebox.showerror('错误','请输入正确的文件名')def attention():messagebox.showinfo('提示','输入二维码内容及\n保存的文件名(要加后缀,例如 test.jpg)后\n按下生成即可\n')root = Tk()root.title('二维码生成器')root.geometry('340x200+610+240')lable = Label(root,text='请输入生成二维码的内容',font=('微软雅黑',15))lable.grid(sticky=W)entry = Entry(root,font=('微软雅黑',20))entry.grid()lable2 = Label(root,text='请输入保存文件名,要加后缀(jpg/png)',font=('微软雅黑',15))lable2.grid(sticky=W)entry2 = Entry(root,font=('微软雅黑',20))entry2.grid()button = Button(root,text='生成',font=('微软雅黑',20),fg='red',command=inspection)button.grid(sticky=W)button2 = Button(root,text='注意',font=('微软雅黑',20),command=attention)button2.grid(row=4,sticky=E)root.mainloop()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。