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

如何解决PIL图片中文本对齐问题?终端格式文本显示错位

解决PIL绘制文本时终端格式对齐失效的问题

问题原因

你使用的ARIAL.TTF是比例字体(字符宽度随字形变化,比如i比w窄),而终端默认使用等宽字体(所有字符宽度一致),这就导致你在终端里靠空格排版的格式化文本,在PIL中用比例字体渲染时对齐完全错乱。

解决方案

1. 替换为等宽字体

将字体换成系统自带的等宽字体,比如:

  • Windows:Consolas.ttf、Courier New.ttf
  • macOS:Menlo.ttc
  • Linux:monospace

2. 修改后的代码示例

import PIL
from PIL import ImageDraw, ImageFont

size = (2000, 500)
W, H = size
clear = PIL.Image.new(mode="RGB", size=size, color=(255, 255, 255))
draw = ImageDraw.Draw(clear)

# 使用等宽字体,根据系统调整字体名称/路径
font = ImageFont.truetype("Consolas.ttf", size=20)
# 计算文本整体尺寸(支持多行)
bbox = draw.textbbox((0, 0), formated_terminal_info, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]

draw.text(
    ((W - text_width) / 2, (H - text_height) / 2),
    formated_terminal_info,
    font=font,
    fill="black",
    align="left",
)
clear.save("test.png", "PNG")

3. 额外注意事项

  • 如果系统找不到指定字体,可尝试使用ImageFont.load_default()加载默认等宽字体(字号可能需要调整)。
  • 确保formated_terminal_info中的换行符是\n,PIL会正确解析多行文本。
  • 若文本包含制表符\t,PIL默认的制表宽度可能和终端不一致,可将\t替换为固定数量的空格(比如4个)来匹配终端效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:15:36