无法正确对齐PIL文本尺寸中的文本

4 投票
1 回答
3904 浏览
提问于 2025-04-17 08:06

我用PIL库在图片上画了一些文字。

我按照这个例子做的:用PIL居中对齐文字,效果不错。不过,当我改变文字内容时,行与行之间就对不齐了。

我用的字体是Verdana。问题可能出在哪里呢?

这个文字显示得离右边边缘有5个像素的距离,效果是对的。

    colour = 'white'
    text = 'Attack Speed 3.7'
    font = ImageFont.truetype("static/fonts/verdana.ttf", 10)
    draw = ImageDraw.Draw(base)
    w, h = draw.textsize(text)
    draw.text((width - 5 - w, 110), text, colour,font=font)

但这个就不行,大约有一半的文字超出了图片的范围:

    colour = 'white'
    text = 'One-hand hammer'
    font = ImageFont.truetype("static/fonts/verdana.ttf", 10)
    draw = ImageDraw.Draw(base)
    w, h = draw.textsize(text)
    draw.text((width - 5 - w, 95), text, colour,font=font)

1 个回答

4

在计算文本的宽度时,如果不考虑字体的因素,你得到的结果只是个大概(特别是当你使用可变宽度的字体时)。

要解决这个问题,可以这样来计算文本的宽度:

w, h = draw.textsize(text, font)

注意,你可能还需要调整右边距的大小,以适应新的宽度计算(五个像素其实挺小的)。

撰写回答