如何在Python中生成下方带植物ID文本的二维码图片?
实现带底部植物ID的二维码生成方案
要给二维码下方添加植物ID文本,你可以用Pillow库来拼接二维码图片和文本。具体操作如下:
- 先安装Pillow依赖
pip install pillow
- 修改你的二维码生成代码,整合文本绘制逻辑:
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
相关产品推荐
相关产品推荐

