python批量生成带logo带文字的二维码

1. 核心文件(01.py), 所有的主要逻辑都在这里面

复制代码
from PIL import ImageFont, ImageDraw, Image
import qrcode
import os


def createQrCode(text):
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        # 比例大约等于1:28
        box_size=20,
        border=1,
    )
    qr.add_data(text)
    qr.make(fit=True)
    qrImg = qr.make_image(fill_color="black", back_color="white")
    return qrImg


def createBg(qrImg):
    img = qrImg.resize((580, 580), Image.ANTIALIAS)
    bg = Image.new("RGB", (580, 660), "#ffffff")
    bg.paste(img, (0, 0))
    return bg


def drawFont(bg, text):
    fontStyle = "./文泉驿等宽微米黑.ttf"
    font = ImageFont.truetype(fontStyle, 24)
    w, h = font.getsize(text)  # 70, 15
    draw = ImageDraw.Draw(bg)
    draw.text(((580 - w) / 2, 600), text, fill="#000000", font=font)
    return bg


def drawLogo(qr, logo, proportion):
    w, h = qr.size
    logo = Image.open(logo)
    resizeW = (int(w * proportion))
    # resizeW = type(size)
    logo = logo.resize((resizeW, resizeW), Image.ANTIALIAS)
    logoW, logoH = logo.size
    center = int((w - logoW) / 2)
    qr.paste(logo, (center, center))
    return qr


def draw(qrText, descText, logoPath, savePath, filename, proportion):
    qrImg = createQrCode(qrText)
    bgImg = createBg(qrImg)
    bgImg2 = drawFont(bgImg, descText)
    res = drawLogo(bgImg2, logoPath, proportion)

    # 判断是否有对应的文件夹, 没有的话, 手动生成一个
    if (savePath in os.listdir() and os.path.isfile(savePath) or savePath not in os.listdir()):
        os.mkdir(savePath)
    res.save(os.path.join(savePath, filename))
    print(f"生成二维码『{filename}』成功")


"""
参数说明: draw(qrText, descText, logoPath, savePath, filename, proportion)
    qrText: 二维码显示的内容
    descText: 二维码下面的文案显示
    logoPath: 二维码中间的logo路径, 相对/绝对
    savePath: 保存的文件夹路径, 例如 ./ (当前)
    filename: 希望保存的名字
    proportion: logo 相对于 二维码的比例
"""
# 单独生成一张
# draw("2021101023", "2021101023", "./logo.jpg", "temp", "02.png", 0.25)


# 读取文件, 生成若干张
def readProperties(path):
    with open(path, 'r', encoding="utf-8") as file:
        qrList = file.readlines()
        for i in qrList:
            cfg = i.strip().split('|')
            if (len(cfg) == 6):
                draw(cfg[0], cfg[1], cfg[2], cfg[3], cfg[4], float(cfg[5]))


readProperties('./qrcode.txt')
复制代码

 

2. 目录文件(qrcode.txt), 如图所示, 会成成六张二维码

2021101023|2021101023|logo.jpg|电客二维码|02.png|0.25
2021101024|2021101024|logo.jpg|电客二维码|23.png|0.25
2021101025|2021101025|logo.jpg|电客二维码|24.png|0.25
2021101026|2021101026|logo.jpg|电客二维码|25.png|0.25
2021101027|2021101027|logo.jpg|电客二维码|26.png|0.25
2021101028|2021101028|logo.jpg|电客二维码|27.png|0.25
2021101029|2021101029|logo.jpg|电客二维码|28.png|0.25
2021101034|2021101034|logo.jpg|电客二维码|29.png|0.25

 

3. 执行文件 ( generate.bat ), 没有的话, 直接执行 01.py 也是一样的

python 01.py

pause

 

4. 其他文件(自备)

  logo文件

  ttf字体文件

 

结果展示

 

posted @   深海里的星星i  阅读(829)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示