Що таке файл OTF?
Файл із розширенням .otf відноситься до формату шрифту OpenType. Формат шрифту OTF є більш масштабованим і розширює наявні функції форматів TTF для цифрової типографіки. Розроблений Microsoft і Adobe, OTF поєднує в собі функції форматів шрифтів PostScript і TrueType. Це робить формат OTF адаптованим до більшості систем письма, і тому він однаково використовується на основних комп’ютерних платформах. Формат шрифту OpenType підтримується Mac OS X і Windows 2000 і пізнішими версіями.
Коротка історія
Потреба у шрифтах OpenType виникла як вимога до більш виразного формату шрифту, який міг би працювати з тонкою типографікою. Крім того, він мав на меті відповідати вимогам складної поведінки багатьох систем письма світу. На початку 1990-х років корпорація Майкрософт спробувала ліцензувати передову технологію типографіки Apple, відому як GX Typography. Це не пішло добре, і в результаті Microsoft почала вдосконалювати власну технологію шрифтів TrueType у 1994 році. Зміни також включали введення більш відповідного формату шрифту, який також відповідає функціям форматів шрифтів Adobe Type 1 (PostScript).
У 1996 році Adobe приєдналася до Microsoft у її зусиллях замінити як TrueType від Apple, так і власні формати шрифтів Type 1. Це призвело до поєднання обох основних форматів шрифтів, щоб подолати обмеження та додати нові розширення. Ця нова технологія була представлена того ж року під назвою OpenType.
Специфікації формату файлу OTF
Специфікації OTF є загальнодоступними для Microsoft, і на них можна посилатися з точки зору розробника. Як і TTF, він використовує ту саму структуру контейнера «sfnt» і сумісний зі специфікаціями TrueType. Дані у файлі шрифту OpenType використовуються для різних цілей, наприклад для обчислення макета тексту, визначення гліфів як контурів TrueType або Compact Font Format (CFF), надання монохроматичних або кольорових растрових зображень або документів SVG як альтернативних описів гліфів та інформації метаданих.
Типи даних OTF
Файли OTF використовують наведені нижче типи даних, які мають великий байт.
Тип даних | Опис |
---|---|
uint8 | 8-розрядне ціле число без знаку. |
int8 | 8-розрядне ціле число зі знаком. |
uint16 | 16-розрядне ціле число без знаку. |
int16 | 16-розрядне ціле число зі знаком. |
uint24 | 24-розрядне ціле число без знаку. |
uint32 | 32-розрядне ціле число без знака. |
int32 | 32-розрядне ціле число зі знаком. |
Зафіксовано | 32-розрядне число з фіксованою комою зі знаком (16.16) |
FWORD | int16, який описує величину в одиницях дизайну шрифту. |
UFWORD | uint16, який описує величину в одиницях дизайну шрифту. |
F2DOT14 | 16-розрядне фіксоване число зі знаком із молодшими 14 бітами дробу (2.14). |
LONGDATETIME | Дата й час, представлені в секундах з 12:00 опівночі 1 січня 1904 року за UTC. Значення представлено як 64-розрядне ціле число зі знаком. |
Тег | Масив із чотирьох uint8 (довжина = 32 біти), який використовується для ідентифікації таблиці, осі варіації дизайну, сценарію, мовної системи, функції або базової лінії |
Зміщення16 | Коротке зміщення до таблиці, таке саме, як uint16, NULL зсув = 0x0000 |
Зміщення32 | Довге зміщення до таблиці, таке ж, як uint32, NULL зсув = 0x00000000 |
Версія16Dot16 | Упаковане 32-розрядне значення з основними та допоміжними номерами версій. (Див. Номери версій таблиці.) |
Каталог таблиць OTF
Файл OTF починається з каталогу таблиці. Цей каталог є колекцією таблиць верхнього рівня у файлі шрифтів. Залежно від кількості шрифтів у файлі, каталог таблиці може розташовуватися в іншому місці у файлі. Наприклад, якщо файл шрифту містить лише один шрифт, каталог таблиці починається з байта 0 файлу. У разі кількох колекцій шрифтів OpenType, початок каталогу таблиці вказується в TTCHeader.
Тип | Найменування | Опис |
---|---|---|
uint32 | sfntVersion | 0x00010000 або 0x4F54544F (‘ОТТО’) |
uint16 | numTables | Кількість таблиць. |
uint16 | searchRange | Максимальна ступінь 2, менша або дорівнює numTables, помножена на 16 ((2**floor(log2(numTables))) * 16, де «**» — оператор піднесення до степеня). |
uint16 | entrySelector Log2 максимальної потужності 2, менший або дорівнює numTables (log2(searchRange/16), що дорівнює floor(log2(numTables))). | |
uint16 | rangeShift | numTables, помножене на 16, мінус searchRange ((numTables * 16) - searchRange). |
tableRecord | tableRecords[numTables] | Масив записів таблиці — по одному для кожної таблиці верхнього рівня у шрифті |
Запис таблиці
Для кожної таблиці верхнього рівня у шрифті є запис таблиці, який складається з наступних полів.
Тип | Ім’я | Опис |
---|---|---|
Тег | tableTag | Ідентифікатор таблиці. |
uint32 | контрольна сума | Контрольна сума для цієї таблиці. |
Зміщення32 | зсув | Зміщення від початку файлу шрифту. |
uint32 | довжина Довжина цієї таблиці. |
Кожна таблиця у файлі шрифту OpenType представлена іменами, відомими як теги таблиці. Необхідно, щоб усі записи в масиві були відсортовані в порядку зростання за тегами.