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

Python中如何创建与文本精准适配的图像?(Pillow/同类工具)

使用Pillow创建与文本精准适配的图像

不需要先创建超大尺寸图像再裁剪——Pillow提供了直接计算文本尺寸的方法,能精准创建刚好适配文本的图像,实现类似ImageMagick convert -font Calibri -pointsize 24 label:"Sample text with a foo bar attached to it." sample.png 的效果。

具体实现步骤如下:

  1. 计算文本的精确边界
    用ImageDraw.textbbox()方法可以获取文本的边界框坐标,通过坐标差值能算出文本的实际宽度和高度。需要提前指定字体、字号等参数,确保和最终绘制的文本一致。

  2. 创建对应尺寸的图像
    根据计算出的文本宽高,创建刚好容纳文本的RGB图像,背景颜色可自定义(比如示例中的白色)。

  3. 绘制文本到图像
    把文本绘制到新创建的图像上,对齐方式要和计算边界时保持一致,确保文本完全填满图像。

完整代码示例:

from PIL import Image, ImageDraw, ImageFont

# 配置文本和字体参数
text_content = "Sample text with a foo bar attached to it."
font_file = "Calibri.ttf"  # 请确保字体文件存在,或替换为系统字体的正确路径
font_size = 24

# 加载指定字体
target_font = ImageFont.truetype(font_file, font_size)

# 临时创建空白图像用于获取Draw对象,计算文本边界
temp_draw = ImageDraw.Draw(Image.new("RGB", (1, 1)))
text_bbox = temp_draw.textbbox((0, 0), text_content, font=target_font, anchor="lt")
text_width = text_bbox[2] - text_bbox[0]
text_height = text_bbox[3] - text_bbox[1]

# 创建刚好适配文本的图像
final_image = Image.new("RGB", (text_width, text_height), color="white")
final_draw = ImageDraw.Draw(final_image)

# 将文本绘制到图像左上角(和边界计算时的锚点一致)
final_draw.text((0, 0), text_content, font=target_font, fill="black", anchor="lt")

# 保存结果
final_image.save("sample.png")

注意:textbbox()是Pillow 9.1.0及以上版本新增的方法,替代了已弃用的textsize()。如果使用旧版本Pillow,可能需要用textsize()来计算尺寸,但推荐升级到新版本以获得更准确的边界计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:22:11