我使用 PIL 在图像上绘制一些文本。

我在这个例子中做了 Center-/middle-align text with 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)

最佳答案

在计算文本宽度时,如果不考虑字体,您只会得到一个近似值(尤其是在使用可变宽度字体时)。

要解决此问题,请像这样计算文本宽度:

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

请注意,您可能还需要调整右边距的大小以考虑新的宽度计算(五个像素非常小)。

关于python - 无法将文本与 PIL 文本大小正确对齐,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8454679/

10-12 22:17
查看更多