aspose.info
RU

OTF — формат файла шрифта TrueType

Обновлено

.OTF вариант №

Файл с расширением .otf относится к формату шрифта OpenType. Формат шрифта OTF является более масштабируемым и расширяет существующие возможности форматов TTF для цифровой типографики. Разработанный Microsoft и Adobe, OTF сочетает в себе функции форматов шрифтов PostScript и TrueType. Это делает формат OTF совместимым с большинством систем письма, поэтому он повсеместно используется на основных компьютерных платформах. Формат шрифта OpenType поддерживается Mac OS X и Windows 2000 и более поздними версиями.

Краткая история

Требование к шрифтам OpenType возникло как требование к более выразительному формату шрифта, который мог бы работать с тонкой типографикой. Кроме того, он был направлен на удовлетворение требований сложного поведения многих мировых систем письма. В начале 1990-х Microsoft попыталась лицензировать передовую типографскую технологию Apple, известную как GX Typography. Это не пошло хорошо, и в результате Microsoft начала совершенствовать свою собственную технологию шрифтов TrueType в 1994 году. Модификации также включали введение более подходящего формата шрифта, который также соответствует функциям форматов шрифтов Adobe Type 1 (PostScript).

Adobe в 1996 году присоединилась к Microsoft в ее усилиях по замене как Apple TrueType, так и собственных форматов шрифтов Type 1. Это привело к объединению обоих базовых форматов шрифтов для преодоления ограничений и добавления новых расширений. Эта новая технология была представлена в том же году под названием OpenType.

Спецификации формата файла OTF

Спецификации OTF общедоступны Microsoft, и на них можно ссылаться с точки зрения разработчика. Как и TTF, он использует ту же структуру контейнера sfnt и совместим со спецификациями TrueType. Данные в файле шрифта OpenType используются для различных целей, таких как расчет макета текста, определение глифов в виде контуров TrueType или Compact Font Format (CFF), предоставление монохроматических или цветных растровых изображений или документов SVG в качестве альтернативных описаний глифов и информации о метаданных.

Типы данных OTF

Файлы OTF используют следующие типы данных, все в формате Big Endian.

Тип данныхОписание
uint88-битное целое число без знака.
int88-битное целое число со знаком.
uint1616-битное целое число без знака.
int1616-битное целое число со знаком.
uint2424-битное целое число без знака.
uint3232-битное целое число без знака.
int3232-битное целое число со знаком.
Фиксированный32-битное число с фиксированной точкой со знаком (16.16)
ПЕРЕСЛОВОint16, который описывает количество в единицах оформления шрифта.
UFWORDuint16, который описывает количество в единицах оформления шрифта.
F2DOT1416-битное фиксированное число со знаком с младшими 14 битами дроби (2.14).
ДОЛГОДАТАВРЕМЯДата и время в секундах с полуночи 1 января 1904 года по всемирному координированному времени. Значение представляется как 64-битное целое число со знаком.
ТегМассив из четырех uint8 (длина = 32 бита), используемый для идентификации таблицы, оси изменения дизайна, сценария, языковой системы, функции или базовой линии
Смещение16Короткое смещение к таблице, аналогично uint16, NULL offset = 0x0000
Смещение32Длинное смещение к таблице, то же, что и uint32, NULL offset = 0x00000000
Версия16Dot16Упакованное 32-битное значение с основными и дополнительными номерами версий. (См. Таблицу номеров версий.)

Каталог таблиц OTF

Файл OTF начинается с каталога таблицы. Этот каталог является коллекцией таблиц верхнего уровня в файле шрифта. В зависимости от количества шрифтов в файле каталог таблицы может располагаться в другом месте файла. Например, если файл шрифта имеет только один шрифт, каталог таблицы начинается с байта 0 файла. В случае нескольких коллекций шрифтов OpenType, начало каталога таблицы указано в TTCHeader.

ТипИмяОписание
uint32sfntВерсия0x00010000 или 0x4F54544F (“ОТТО”)
uint16numTablesКоличество таблиц.
uint16searchRangeМаксимальная степень числа 2 меньше или равна numTables, умноженная на 16 ((2**floor(log2(numTables))) * 16, где «**» — оператор возведения в степень).
uint16entrySelector Log2 максимальной степени 2 меньше или равно numTables (log2(searchRange/16), что равно floor(log2(numTables))).
uint16rangeShiftnumTables умножить на 16 минус searchRange ((numTables * 16) - searchRange).
запись таблицыtableRecords[numTables]Массив записей таблицы — по одной для каждой таблицы верхнего уровня в шрифте

Запись таблицы

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

ТипИмяОписание
ТегТаблицаТегИдентификатор таблицы.
uint32контрольная суммаКонтрольная сумма для этой таблицы.
Смещение32смещениеСмещение от начала файла шрифта.
uint32length Длина этой таблицы.

Каждая таблица в файле шрифтов OpenType представлена именами, известными как табличные теги. Обязательно, чтобы все записи в массиве были отсортированы в порядке возрастания по тегу.

использованная литература

См. также