PIL: могу ли я иметь несколько размеров текста одного и того же шрифта? (Python) - PullRequest
0 голосов
/ 17 февраля 2020

В настоящее время пытаюсь использовать один и тот же шрифт для изображения с PIL, но с разными размерами.

Попытка иметь два разных экземпляра шрифта, но это не сработало. Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2020

Если вы используете ImageFont.truetype(), вам понадобится несколько экземпляров для нескольких размеров.

Вы можете аккуратно обернуть это, используя functools.lru_cache(), чтобы получить один шрифт / размер загружается только один раз во время вашего приложения:

from functools import lru_cache

get_font = lru_cache()(ImageFont.truetype)

draw.text((10, 10), "hello", font=get_font("Arial.ttf", 10))
draw.text((10, 50), "world", font=get_font("Arial.ttf", 50))
0 голосов
/ 17 февраля 2020

Я думаю, что вы имеете в виду это:

#!/usr/bin/env python3

from PIL  import Image, ImageFont, ImageDraw

# Create a black canvas
canvas = Image.new('RGB', (400,200))

# Get a drawing context
draw = ImageDraw.Draw(canvas)
monospace20 = ImageFont.truetype("/Library/Fonts/Andale Mono.ttf",20)
monospace50 = ImageFont.truetype("/Library/Fonts/Andale Mono.ttf",50)

draw.text((10, 10), "Hello 20", font=monospace20, fill=(255,255,255))
draw.text((10, 90), "Hello 50", font=monospace50, fill=(255,255,255))

canvas.save('result.png')

enter image description here

...