如何解决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
相关产品推荐
相关产品推荐

