You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中生成下方带植物ID文本的二维码图片?

实现带底部植物ID的二维码生成方案

要给二维码下方添加植物ID文本,你可以用Pillow库来拼接二维码图片和文本。具体操作如下:

  1. 先安装Pillow依赖
pip install pillow
  1. 修改你的二维码生成代码,整合文本绘制逻辑:
import qrcode
from PIL import Image, ImageDraw, ImageFont
from tkinter import messagebox
from datetime import date

def qr():
    selected_item = tree.focus()
    if not selected_item:
        messagebox.showerror("Error", "Choose a plant to generate a qr-code for")
    else:
        plant_id = plant_id_entry.get()
        # 生成基础二维码
        qr_img = qrcode.make(plant_id)
        qr_width, qr_height = qr_img.size
        
        # 计算新画布大小:二维码高度+文本区域高度(预留padding和文本空间)
        text_padding = 10
        text_height = 20
        new_height = qr_height + text_height + text_padding * 2
        new_img = Image.new("RGB", (qr_width, new_height), "white")
        
        # 把二维码粘贴到新画布上方位置
        new_img.paste(qr_img, (0, text_padding))
        
        # 准备绘制文本
        draw = ImageDraw.Draw(new_img)
        # 尝试加载系统字体,找不到则用默认字体
        try:
            font = ImageFont.truetype("simhei.ttf", 16)  # Windows系统黑体,Mac可换"Songti.ttc"
        except:
            font = ImageFont.load_default()
        
        # 计算文本居中的坐标
        text_bbox = draw.textbbox((0,0), plant_id, font=font)
        text_width = text_bbox[2] - text_bbox[0]
        text_x = (qr_width - text_width) // 2
        text_y = qr_height + text_padding
        
        # 绘制植物ID文本
        draw.text((text_x, text_y), plant_id, font=font, fill="black")
        
        # 保存最终图片
        save_name = f"{plant_id} {date.today()}.png"
        new_img.save(save_name)
        messagebox.showinfo("Success", f"QR code with ID saved as {save_name}")

代码说明

  • 先生成普通二维码,再创建一个更大的白色画布,预留出文本区域的空间
  • 将二维码粘贴到画布上方,保留顶部和底部的留白
  • 通过计算让植物ID文本居中显示在二维码下方
  • 字体做了兼容处理,你可以根据自己的操作系统调整字体路径,确保文本显示正常

内容的提问来源于stack exchange,提问作者Bart B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:00:03