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

如何使用PIL在图片下方绘制文本?已实现图上绘文本但下方失败

问题分析与解决

你当前的问题是文本绘制在了图片外部区域,所以看不到效果,原因如下:

  • img.size[1]是图片的高度值,对应图片最底部的y坐标。PIL绘制文本时,是以传入的(x,y)作为文本块的左上角起点,当y等于图片高度时,整个文本块都在图片下方的空白区域,自然无法显示。
  • 另外你的代码最后少了一个闭合括号,虽然没报错,但属于语法隐患,需要补上。

解决步骤

要在图片下方绘制可见的文本,需要先扩展图片的画布空间,再在新区域绘制文本:

  1. 计算文本的高度:先获取文本的边界框,得到文本占用的高度
  2. 创建扩展后的新画布:高度设为原图片高度 + 文本高度 + 适当边距(避免文本贴太近)
  3. 粘贴原图片到新画布:保持原图片在顶部位置
  4. 在新画布的指定位置绘制文本:y坐标设为原图片高度 + 边距

示例代码

from PIL import Image, ImageDraw, ImageFont

# 假设你已经加载了图片和字体
img = Image.open("your_image.jpg")
font = ImageFont.truetype("your_font.ttf", 24)  # 替换为你的字体路径和字号
mytext = "要绘制的文本内容"

# 1. 计算文本的边界框,获取文本高度
draw_temp = ImageDraw.Draw(img)
bbox = draw_temp.textbbox((0, 0), text=mytext, font=font)
text_height = bbox[3] - bbox[1]
margin = 10  # 文本和图片之间的边距

# 2. 创建新画布,宽度和原图一致,高度扩展
new_height = img.size[1] + text_height + margin
new_img = Image.new(img.mode, (img.size[0], new_height), color="white")  # 背景色可按需调整

# 3. 粘贴原图片到新画布顶部
new_img.paste(img, (0, 0))

# 4. 在新画布绘制文本
draw = ImageDraw.Draw(new_img)
# 取原图片的指定像素颜色作为填充色
fill_color = img.getpixel((502, 10))
draw.text((0, img.size[1] + margin), text=mytext, font=font, fill=fill_color)

# 保存或显示结果
new_img.save("result.jpg")
new_img.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:01:16