Невозможно правильно выровнять текст по размеру PIL - PullRequest
4 голосов
/ 10 декабря 2011

Я использую PIL, чтобы нарисовать текст на изображении.

Я сделал, как в этом примере Выровнять текст по центру / центру с помощью PIL? , и это сработало, однако, когда текстовая фраза изменилась, строки не выровнены.

Шрифт Вердана. Где может быть проблема?

Правильно отображается 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 голосов
/ 10 декабря 2011

При расчете ширины текста вы получите приблизительное значение только в том случае, если шрифт не учитывается (особенно если вы используете шрифт переменной ширины).

Чтобы исправить это, рассчитайте ширину текста следующим образом:

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

Обратите внимание, что вам также может понадобиться настроить размер правого поля, чтобы учесть новый расчет ширины (пять пикселей - это довольно мало).

...