Извлечение внутренней информации файла TFF по Java или C# - PullRequest
0 голосов
/ 27 мая 2020

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

Я искал много ресурсов, но не нашел ничего полезного информация.

Любое мнение для Java или c#?

Спасибо.

1 Ответ

0 голосов
/ 04 июня 2020

Вы не указали, с какой платформой / фреймворком / библиотекой вы работаете. И есть некоторая сложность в том, что вам нужно.

TrueType / OpenType давно поддерживают таблицу 'kern' с данными кернинга.

Windows GDI имеет функцию GetKerningPairs () , которая возвращает все данные из таблицы kern шрифта (если есть). Он ограничен тем, что не может поддерживать символы дополнительной плоскости Unicode (кодовые точки U + 10000 и выше).

Windows DirectWrite имеет аналогичный API: IDWriteFontFace1 :: GetKerningPairAdjustments () . Однако это может быть не совсем то, что вам нужно: он не перечисляет пары кернинга шрифта, а скорее берет последовательность глифов и возвращает настройки для этой последовательности. DWrite также имеет IDWriteFontFace1 :: HasKerningPairs () , который сообщит вам, есть ли у шрифта пары кернинга в таблице kern.

Но вот дополнительная сложность: таблица kern - это старая технология, которая позже была заменена механизмами OpenType Layout. Шрифт может иметь таблицу 'GPOS' , которая определяет различные типы корректировок расположения глифов:

  • регулировка ширины продвижения отдельных глифов или размещение x, y
  • отрегулировать продвижение / размещение пары глифов
  • отрегулировать положение одиночного глифа или пары глифов в определенных контекстах
  • et c.

Позиционирование корректировка может производиться по разным причинам; интересующие вас случаи, "кернинг", будут связаны с тегом функции 'kern'. Вы можете использовать API, например IDWriteFontFace :: TryGetFontTable , чтобы получить данные таблицы GPOS и проанализировать их самостоятельно. Вам нужно изучить подтаблицу FeatureList таблицы GPOS, чтобы найти FeatureTable, связанный с функцией 'kern', и (если есть) получить массив индексов поиска из этой таблицы функций. Затем вы можете заглянуть в подтаблицу LookupList таблицы GPOS, чтобы найти указанные таблицы Lookup. Затем вам нужно будет проанализировать подтаблицу Lookup для каждой из указанных таблиц Lookup, чтобы точно определить, какие глифы или пары глифов используются.

...