Как использовать fontTools для обнаружения шрифтов Type 1 и OpenType CFF

Я знаю, что можно обнаружить шрифты Type 1 и OpenType CFF ("OpenType со вкусом PostScript"), проверив первые 4 байта для "OTTO" (0x4F54544F).

Как бы я сделал это в Python с библиотекой fontTools? Т.е., какую таблицу шрифтов мне нужно проверить на это значение?

1 ответ

Решение

Версия хранится в заголовке файла шрифта, а не в таблице данных шрифта. Если у тебя есть ttLib.TTFont объект (т.е. вы открыли файл шрифта с помощью fontTools), вы можете посмотреть на .sfntVersion атрибут вашего TTFont объект, чтобы получить версию (которая обычно будет либо 0x00010000 / Версия 1 или 0x4F54544F / ОТТО, но есть и другие возможные значения, см. Ниже). Но это предполагает, что вы уже создали TTFont объект, открыв файл шрифта, так что это может быть своего рода проблема курица и яйцо. Если вам интересно узнать версию, прежде чем пытаться открыть файл / создать TTFont Вам нужно будет прослушать первые четыре байта (по крайней мере) вне fontTools.


Примечание: я немного смущен вашим вопросом. Вы упоминаете Type 1, который на самом деле является своего рода шрифтом PostScript, но не (обычно) таким, как в шрифтах OpenType/sfnt-housed (это будет Type 2, "Compact Font Format" или CFF). Предположительно есть способ сохранить Type 1 в шрифтах OpenType/sfnt-housed; Apple упоминает об этом в своем справочном руководстве по TrueType:

Значения 'true' (0x74727565) и 0x00010000 распознаются OS X и iOS как ссылающиеся на шрифты TrueType. Значение 'typ1' (0x74797031) распознается как относящееся к старому стилю шрифта PostScript, помещенному в оболочку sfnt. Значение "OTTO" (0x4F54544F) указывает шрифт OpenType с контурами PostScript (т. Е. Таблица "CFF" вместо таблицы "glyf"). Другие значения в настоящее время не поддерживаются.

Так что если typ1 на самом деле то, о чем вы спрашиваете, вы могли бы искать 0x74797031 /"typ1" в первых четырех байтах файла. Но актуально typ1 sfnt-размещенные шрифты чрезвычайно редки - как почти не существующие. Подавляющее большинство фактических шрифтов Type 1 будет либо в файлах.PFA/.PFB (для платформ не-Mac), либо в файле "Printer Font" (pre-OS X Mac), который будет связан со старым ресурсом. -fork файл "чемодан", содержащий растровые изображения. Файлы шрифтов типа 1 будут иметь %!PS-AdobeFont-1 как первые байты файла.

Другие вопросы по тегам