Альтернативные глифы PIL Custom Font не используются - PullRequest
1 голос
/ 03 апреля 2020

Я сделал собственный шрифт для рукописного ввода и экспортировал его в файл .ttf. Служба, которую я использовал, Caligriphr, позволяет использовать альтернативные глифы для каждого символа. Когда я печатаю шрифтом в блокноте, альтернативные глифы отображаются правильно. Однако когда я пишу текст на изображение, используя PIL с пользовательским шрифтом, для каждого символа используется только один глиф. Ниже мой код для записи на изображении:

body = ""
with open('body.txt') as fin:
    ls = fin.readlines()
    for l in ls:
        words = l.split(' ')
        for word in words:
            double = random.randint(1,2) == 2
            if(double):
                body += '  ' + word
            else:
                body += ' ' + word
image = Image.open('graph.jpg').convert("RGBA")
text = Image.new('RGBA', image.size, (255,255,255,0))
font = ImageFont.FreeTypeFont('Graphite.ttf', 100)
d = ImageDraw.Draw(text)
d.text(xy=offset, text=body, fill = (26,29,32, 230), font=font)
tilt = random.random() * 2
slt = text.rotate(tilt, expand=1)
sx, sy = slt.size
image.paste(slt, (0,0, sx, sy), slt)
image.save('sample.png')

Редактировать: показ кода для построения строки тела

Любая помощь будет принята с благодарностью.

Альтернативные символы, отображаемые в блокноте

Выход PIL без использования альтернативных символов

1 Ответ

0 голосов
/ 03 апреля 2020

Это может зависеть от того, используете ли вы исходную библиотеку PIL или Подушка .

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

Это могут быть таблицы макетов OpenType в шрифтах OpenType, таблицы AAT в шрифтах Apple TrueType или таблицы Graphite в шрифтах Graphite, в зависимости от того, что поддерживает Platgorm / Library. Поскольку вы упоминаете, что у вас есть альтернативы в Блокноте, это означает, что шрифт содержит данные макета OpenType.

Чтение документации Pillow ImageFont , он не дает никаких указаний относительно того, поддерживает ли он какие-либо из этих форматов шрифтов. Однако, глядя на проект Pillow в Github , я вижу, что [winbuild \ config.py] использует Harfbuzz, и это обеспечило бы поддержку данных OpenType Layout. Таким образом, кажется, что Подушка должна рисовать, используя контекстные альтернативные глифы, хотя я не знаю, нужно ли что-нибудь для его запуска. (В Блокноте это происходит по умолчанию, но это не везде так.)

...