如何使用PIL在图片下方绘制文本?已实现图上绘文本但下方失败
问题分析与解决
你当前的问题是文本绘制在了图片外部区域,所以看不到效果,原因如下:
img.size[1]是图片的高度值,对应图片最底部的y坐标。PIL绘制文本时,是以传入的(x,y)作为文本块的左上角起点,当y等于图片高度时,整个文本块都在图片下方的空白区域,自然无法显示。- 另外你的代码最后少了一个闭合括号,虽然没报错,但属于语法隐患,需要补上。
解决步骤
要在图片下方绘制可见的文本,需要先扩展图片的画布空间,再在新区域绘制文本:
- 计算文本的高度:先获取文本的边界框,得到文本占用的高度
- 创建扩展后的新画布:高度设为原图片高度 + 文本高度 + 适当边距(避免文本贴太近)
- 粘贴原图片到新画布:保持原图片在顶部位置
- 在新画布的指定位置绘制文本: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
相关产品推荐
相关产品推荐

