基于MYQR库的批量生成带图片背景的二维码(支持GIF)
出于兴趣自学了一点python,想着综合一下这段时间的学习,写了这段代码而且我在写完之后才发现myqr不支持中文。有点遗憾
还有个小问题就是我打包成exe后居然对gif的背景图会报错,但是对源码运行是没有问题的,有点想不通
而且我还不会正则表达式,感觉有的地方写的稀烂,但是目前我还不会优化,而且以我现在的能力写到这个程度我感觉就还可以了。
不过程序嘛,能跑就行
图片支持png,jpg,gif
支持批量生成二维码
内容为文字或网址,在word.txt中每个一行
图片数量可少于文本数
图片以img (i).*的形式命名,即windows系统多选重命名的格式,i从1开始编号
图片放在和程序同级的目录
二维码配置项在config.ini中修改
暂不支持中文
只有一张图片也要编号为img (1),括号是英文半角括号,img后面有个空格原理是通过读取word.txt中的每一行文本获得二维码内容,
读取config.ini中的配置获得二维码格式
在py文件的同级目录下放置要作为二维码背景的图片,
最好使用方形的图片,不然比例失调了就比较难看
嗯,确实写得稀烂,下面是代码
from MyQR import myqr
import configparser
import os
import sys
global fdir #定义全局变量,当前文件所在目录
fdir=os.path.dirname(os.path.realpath(sys.argv)) #获取当前文件所在目录
fdir='/'.join(fdir.split('\\')) #防止路径被转义
#获取配置
def getconfig():
cf=configparser.ConfigParser() #生成配置对象
cf.read(fdir+"/config.ini",encoding='UTF-8') #拼接配置文件路径并读取
#获取参数
vsion=cf.getint('config','version')
level=cf.get('config','level')
colorized=cf.getboolean('config','colorized')
contrast=cf.getfloat('config','contrast')
brightness=cf.getfloat('config','brightness')
picture=cf.getboolean('config','picture')
return vsion,level,colorized,contrast,brightness,picture
#获取内容
def getwords():
word=open(fdir+"/words.txt",encoding='UTF-8').read() #读取内容
words=word.split('\n')
return words
#获取图片地址
def getimg(i):
img='/img ({0}).'.format(i)
return fdir+img+'jpg',fdir+img+'png',fdir+img+'gif'
#检测图片是否存在,并获取图片个数
def checkimg():
i=0
k=0
l=0
res=True
while res:
i=i+1
j,p,g=getimg(i)
res=os.path.exists(j)
res=True
while res:
k=k+1
j,p,g=getimg(k)
res=os.path.exists(p)
res=True
while res:
l=l+1
j,p,g=getimg(l)
res=os.path.exists(g)
i=i-1
k=k-1
l=l-1
if i+k+l==0:
t=True
else:
t=False
return i,k,l,t
#生成字典
def getdic():
dic={}
imgs=[]
words=getwords()
i,j,k,t=checkimg()
for m in range(1,i+1):
i_j,i_p,i_g=getimg(m)
imgs.append(i_j)
for m in range(1,j+1):
i_j,i_p,i_g=getimg(m)
imgs.append(i_p)
for m in range(1,k+1):
i_j,i_p,i_g=getimg(m)
imgs.append(i_g)
m=0
for word in words:
dic=imgs
m=m+1
if m>=len(imgs):
m=0
return dic
#生成二维码
def inputqr():
if not os.path.exists(fdir+'/saveqr'): #创建生成目录
os.mkdir(fdir+'/saveqr')
v,l,color,c,b,p=getconfig() #读配置
x,y,z,t=checkimg()
if t:
p=False
if not p:
words=getwords()
img=None
i=0
for word in words:
print('{}成功\n'.format(word))
if img[-3:]=='gif':
i_end='gif'
else:
i_end='png'
i=i+1
myqr.run(words=word,picture=img,version=v,level=l,colorized=color,contrast=c,brightness=b,save_dir=fdir+'/saveqr',save_name='img{}.{}'.format(i,img[-3:]))
else:
dic=getdic()
i=0
for word,img in dic.items():
print('{}-->{}\n'.format(word,img))
if img[-3:]=='gif':
i_end='gif'
else:
i_end='png'
i=i+1
myqr.run(words=word,picture=img,version=v,level=l,colorized=color,contrast=c,brightness=b,save_dir=fdir+'/saveqr',save_name='img{}.{}'.format(i,i_end))
#程序入口
if __name__=='__main__':
inputqr()
input('程序结束')
配置文件内容
version=1
#二维码大小,范围为
level=H
#二维码纠错级别,范围为{L,M,Q,H},H为最高级,默认。
colorized=True
#二维码背景颜色,默认为 False,即黑白色
contrast=1
#对比度,值越高对比度越高,默认为 1.0
brightness=1
#亮度,值越高亮度越高,默认为 1.0,值常和对比度相同
picture=True
#是否打开背景图片开关,Trut和False均首字母大写
包含配置文件的压缩包 压缩包链接好像没打上,https://wwm.lanzouw.com/ixSfT00g9t2h 感谢楼主分享,看起来生成的图片效果不错,不知道GIF背景会不会影响识别率。
感谢楼主分享,看起来生成的图片效果不错
页:
[1]