吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3345|回复: 3
收起左侧

[Python 转载] 基于MYQR库的批量生成带图片背景的二维码(支持GIF)

[复制链接]
听风起的乐天派 发表于 2022-2-22 14:19
出于兴趣自学了一点python,想着综合一下这段时间的学习,写了这段代码
而且我在写完之后才发现myqr不支持中文。有点遗憾
还有个小问题就是我打包成exe后居然对gif的背景图会报错,但是对源码运行是没有问题的,有点想不通
而且我还不会正则表达式,感觉有的地方写的稀烂,但是目前我还不会优化,而且以我现在的能力写到这个程度我感觉就还可以了。
不过程序嘛,能跑就行

图片支持png,jpg,gif
支持批量生成二维码
内容为文字或网址,在word.txt中每个一行
图片数量可少于文本数
图片以img (i).*的形式命名,即windows系统多选重命名的格式,i从1开始编号
图片放在和程序同级的目录
二维码配置项在config.ini中修改
暂不支持中文
只有一张图片也要编号为img (1),括号是英文半角括号,img后面有个空格
原理是通过读取word.txt中的每一行文本获得二维码内容,
读取config.ini中的配置获得二维码格式
在py文件的同级目录下放置要作为二维码背景的图片,
最好使用方形的图片,不然比例失调了就比较难看

运行效果

运行效果

嗯,确实写得稀烂,下面是代码
[Python] 纯文本查看 复制代码
from MyQR import myqr
import configparser
import os
import sys
global fdir #定义全局变量,当前文件所在目录
fdir=os.path.dirname(os.path.realpath(sys.argv[0])) #获取当前文件所在目录
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[word]=imgs[m]
        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('程序结束')

配置文件内容
[Python] 纯文本查看 复制代码
[config]
version=1
#二维码大小,范围为[1,40]
level=H
#二维码纠错级别,范围为{L,M,Q,H},H为最高级,默认。
colorized=True
#二维码背景颜色,默认为 False,即黑白色
contrast=1
#对比度,值越高对比度越高,默认为 1.0
brightness=1
#亮度,值越高亮度越高,默认为 1.0,值常和对比度相同
picture=True
#是否打开背景图片开关,Trut和False均首字母大写


包含配置文件的压缩包

免费评分

参与人数 2吾爱币 +8 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xyl52p + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 听风起的乐天派 发表于 2022-2-22 14:22
压缩包链接好像没打上,https://wwm.lanzouw.com/ixSfT00g9t2h
xyl52p 发表于 2022-2-22 16:44
感谢楼主分享,看起来生成的图片效果不错,不知道GIF背景会不会影响识别率。
heidi53669363 发表于 2023-3-14 12:09
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表