Как я могу решить, какой шрифт использовать для каждого символа в строке? - PullRequest
1 голос
/ 27 апреля 2020

Я пишу бот Discord, который встречает новых пользователей изображениями (с их именами), используя Подушка . И люди часто склонны использовать иностранные символы Unicode в своих именах (или имена на разных языках, таких как китайский, японский и c.), Которые мой шрифт не поддерживает. Они выглядят как пустые коробки. Примеры:

  • 你好
  • | | ¨z ล ƒҡ เ εŁ | |
  • G̷̈̐e̸̾̾n̶͛̊e̴̊͗r̴̾́a̴͆̑t̸̿̌o̶̽̃r̶̈́̔Z̶̈́̑a̸̋̀l̸͋͝g̵̀̓

Я пробовал несколько шрифтов и узнал, что я не могу просто использовать один шрифт, который поддерживает все это. Затем я наткнулся на Google Noto и, очевидно, их семейство шрифтов поддерживает все виды языков.

Итак, вот мой план:

  • Проверьте каждый символ в строке и посмотрите, поддерживает ли его основной шрифт
    • Если да, просто нарисуйте символ
    • Если нет, найдите другой шрифт, который его поддерживает, и нарисуйте его.

С этим связано несколько проблем:

  • I не следует перебирать все шрифты для каждого символа и проверять, поддерживает ли один из них его. Это будет очень плохо с точки зрения производительности.
  • Я не знаю, как бы нарисовал каждого персонажа и чтобы он выглядел организованно. Я предполагаю, что между каждым шрифтом будет заметная разница в размере и стиле.

До сих пор я нашел библиотеку fontTools , которая позволит мне проверить, поддерживает ли шрифт символ или нет, но я не знаю, как мне поступить с этого момента. Мне любопытно:

  • Как почти каждый веб-сайт поддерживает и обрабатывает эти тексты?
  • Как бы я достиг своей цели, используя Pillow в Python?

Была бы признательна за помощь. Спасибо.

1 Ответ

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

У меня была похожая проблема. Мне пришлось проанализировать все используемые мной шрифты и создать базу данных шрифтов и символов.

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

...