logo NodeSeekbeta

「Python源码分享」告别PS!自动生成带“文字Logo”的品牌二维码

最近有个需求:需要生成中间带品牌文字的二维码。

以前的做法要么是去搜在线生成器(怕带广告/不安全),要么是用 Python 生成二维码后再打开 PS 把 logo P 上去,太麻烦了。

于是随手撸了一个 Python 脚本,分享给大家

核心功能:

无需准备 Logo 图片:脚本会自动根据你输入的文字(比如品牌名),动态画一张正方形图片放在二维码中间。

自动居中 & 适配字体:自动调用系统字体,把文字居中画在色块里。

高容错率 (30%):开启了 QR Code 的 H 级容错,中间挡住一大块照样能秒扫。

交互式操作:运行脚本 -> 弹窗输链接 -> 弹窗输文字 -> 出图。

🛠️ 环境依赖: 只需要装 qrcode 和 Pillow 两个库:

pip install qrcode[pil] pillow

完整源码 (保存为 qr_maker.py 直接运行)

import qrcode
from PIL import Image, ImageDraw, ImageFont
import os
import tkinter as tk
from tkinter import simpledialog
import platform

def get_user_input():
    """弹出输入框获取用户输入"""
    root = tk.Tk()
    root.withdraw() # 隐藏主窗口
    
    # 1. 获取链接
    url = simpledialog.askstring("步骤 1/2", "请输入二维码跳转链接:\n(例如: https://www.google.com)")
    if not url: return None, None
    
    # 2. 获取品牌文字
    brand_text = simpledialog.askstring("步骤 2/2", "请输入中间显示的品牌文字/字母:\n(建议1-4个字母,例如: VIP)")
    if not brand_text: brand_text = "Q" # 默认值
    
    return url, brand_text

def create_text_logo_img(text, size, bg_color="black", text_color="white"):
    """根据文字生成一张正方形图片"""
    # 1. 创建背景图 (RGBA模式)
    img = Image.new('RGBA', (size, size), bg_color)
    draw = ImageDraw.Draw(img)
    
    # 2. 尝试加载字体 (优先使用Arial,否则使用默认)
    font_size = int(size * 0.5) 
    try:
        # 简单适配不同系统的字体路径
        font_path = "arial.ttf" 
        if platform.system() == "Darwin": font_path = "Arial.ttf"
        elif platform.system() == "Linux": font_path = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"
        font = ImageFont.truetype(font_path, font_size)
    except IOError:
        font = ImageFont.load_default()

    # 3. 绘制文字 (居中)
    draw.text((size/2, size/2), text, font=font, fill=text_color, anchor="mm")
    return img

def generate_qr(url, brand_text):
    print(f"正在生成...")

    # --- 1. 生成基础二维码 ---
    qr = qrcode.QRCode(
        version=None,
        error_correction=qrcode.constants.ERROR_CORRECT_H, # 关键:30%高容错率
        box_size=10,
        border=4,
    )
    qr.add_data(url)
    qr.make(fit=True)
    qr_img = qr.make_image(fill_color="black", back_color="white").convert('RGBA')

    # --- 2. 动态生成文字Logo ---
    qr_w, qr_h = qr_img.size
    logo_size = int(qr_w / 4) # Logo占总宽度的 1/4
    
    # 生成文字图片 (默认黑底白字,显眼)
    logo_img = create_text_logo_img(brand_text, logo_size, bg_color="black", text_color="white")

    # --- 3. 粘贴 ---
    pos_x = (qr_w - logo_size) // 2
    pos_y = (qr_h - logo_size) // 2
    qr_img.paste(logo_img, (pos_x, pos_y))

    # --- 4. 保存 ---
    save_name = f"QR_{brand_text}.png"
    # 清理非法文件名字符
    save_name = "".join([c for c in save_name if c.isalnum() or c in (' ', '.', '_')]).strip()
    
    qr_img.save(save_name)
    print(f"✅ 成功!已保存为: {os.path.abspath(save_name)}")

if __name__ == '__main__':
    url_in, text_in = get_user_input()
    if url_in:
        generate_qr(url_in, text_in)
		

DIY 小技巧: 如果你想改中间 Logo 的颜色(比如想要蓝底白字),找到代码里 create_text_logo_img 调用的地方,改成:

bg_color="#0055AA", text_color="white"

挺简单的一个小工具,有需要的拿去玩

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72615位seeker

🎉欢迎新用户🎉