2015-07-01 3 views
2

Я представляю текст ввода пользователем на фоновое изображение с Python PIL (я использую подушку).Как использовать PIL (подушку) для рисования текста на любом языке?

код прост:

draw = ImageDraw.Draw(im) 
draw.text((x, y), text, font=font, fill=font_color) 

проблема, пользователь может вводить на любом языке, как я мог определить, какой font использовать?

ps: Я знаю, что сначала должен иметь файлы шрифтов, поэтому я искал и нашел Google Noto, загрузил все шрифты, поместил их в /usr/local/share/fonts/, но эти шрифты разделены языком, поэтому я до сих пор не могу загрузить шрифт который может отображать все пользовательские входные тексты.

+1

[Эта проблема] (https://github.com/googlei18n/noto-fonts/issues/13) была поднята на странице gothub noto-fonts. Один символ ttf ограничен символами ~ 64K. Unicode 8.0 имеет более 100 тыс. Глифов. Таким образом, один ttf не может содержать все символы Unicode – unutbu

ответ

3

NoTo (это буквально только шрифты Adobe Source Pro с другим именем, потому что Google так проще продавать его) - это не один шрифт, это семейство шрифтов. Когда вы go to download them, Google явно говорит вам, что есть много разных версий для множества различных целевых языков, для двух простых причин, почему:

  1. если вам нужно верстать набор на всей планете известных сценариев, есть значительно больше глифов, чем в одном шрифте (шрифты OpenType имеют жесткий предел 65535 глифов на файл из-за того, что идентификаторы глифов кодируются как поля USHORT. И шрифты являются композиционными: «буква» может фактически быть буквой C и символ °, поэтому он полагается на три глифов: два настоящих глифа и одна виртуальная композиция. Вы так быстро исчерпаете пространство), и
  2. , даже если шрифт может соответствовать всем глифам, один и тот же сценарий, возможно, нужно будет отличать в зависимости от языка, на котором он используется, поэтому даже наличие одного шрифта для китайского и японского языков, или для арабского и урду просто не используется Не работай. Хотя шрифты OpenType могут справиться с этим, будучи рассказанными, какие варианты набора использовать, и какие композиционные правила, основанные на определенных языковых тегах, являются типом контроля, который отлично работает в InDesign или LaTeX, и это самое худшее для шрифтов, которые идут для использования в контексте без управления (например, веб-просмотр Android).

Так правильное решение, чтобы захватить все шрифтов, а затем выбрать правильную на основе {script, language} пары вы генерирующую текст для. Это сложнее, чем то, что вы пытаетесь сделать? Да. Это необходимо? Аналогично да =)

Смежные вопросы