TrueType

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая 91.193.177.162 (обсуждение) в 12:42, 22 августа 2019. Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску
TrueType
,
Расширение .ttf, .tte или .dfont
MIME-тип font/ttf[1]
Тип формата формат файла
Логотип Викисклада Медиафайлы на Викискладе

TrueType («трутайп») — формат компьютерных шрифтов, разработанный фирмой Apple в конце 1980-х годов.

Шрифты в данном формате используются во многих современных операционных системах. Файлы с такими шрифтами имеют расширение имени «ttf». В зависимости от версии формата максимальное количество хранимых символов может ограничиваться значениями 28 (256), 216 (65 536) или 232 (4 294 967 296)[2].

Свободное ПО

В ОС на основе свободного ПО для работы с данными шрифтами используется свободная библиотека FreeType, поддерживающая этот и другие форматы шрифтов.

Apple принадлежат три патента, имеющие отношение к некоторым способам обработки контуров шрифтов TrueType для вывода при маленьком размере. Так как эти патенты могут препятствовать свободному использованию таких способов, FreeType по умолчанию распространяется с отключённой их поддержкой, и обрабатывает контуры по-другому[3].

Принцип хранения информации о символе

TrueType: формат создан для хранения информации o контуре символа (векторное изображение). В отличие от растрового символа — векторный легко масштабируется. Но и у векторного способа хранения есть свои недостатки. Для того чтобы однозначно понимать (интерпретировать) записанную информацию, пользуются следующими правилами[4][5]:

рисунок 1 Построение прямой по двум точкам
рисунок 2 Построение кривой Безье
  • информация о линии контура хранится в виде точек;
  • прямая линия контура строится по двум точкам: начальной и конечной (рисунок 1);
  • элемент дуги строится методом Безье: начало и конец кривой описываются точками, которые лежат на самой кривой; остальные точки, не принадлежащие кривой, служат для построения дуг (рисунок 2).

Для построения кривой (рисунок 2) требуется три точки: P0, P1 и P2, которая идёт из точки P0 в точку P2. P1 не лежит на кривой и служит для определения её кривизны. Для расчёта каждой точки кривой воспользуемся формулой 1:

(формула 1)
рисунок 3 Построение более сложной кривой, состоящей из двух кривых Безье
рисунок 4 Кривая без промежуточной точки P2 (см. рисунок 3)

На рисунке 3 приведён пример сложной кривой, которая состоит из двух простых.

На рисунке 4 та же самая кривая, но точка P2 отсутствует. Её координаты восстанавливают. Например в данном случае точка P2 лежит посередине отрезка P1P3. Подробнее об этом можно почитать в описании построения кривой Безье, квадратичный метод.

Итак, для построения контура используется два вида точек. Один тип — это точка, лежащая на контуре, является началом одной кривой или отрезка и концом другой. Другой вид точек — это точки не лежащие на контуре и являются контрольными точками для построения кривой. Между двумя кривыми может отсутствовать координатная точка и её придётся восстанавливать.

Следующее правило:

  • первая и последняя точка контура замыкаются. То есть контур не может быть не замкнутым. Обязательно строится отрезок или кривая из последней точки в первую.
рисунок 5 Построение символа «С»

На рисунке 5 показан приём построения одноконтурного символа «С». Контур состоит как из отрезков, так и из кривых. Или, говоря дословно, для построения этого символа использовались точки, лежащие на контуре (on-curve), и контрольные точки (не лежащие на кривой, off-curve). 25 точка смыкается с 0. 26, 27 точки являются контрольными (off-curve) и служат для построения кривой 25-0.

рисунок 6 Построение трёхконтурного символа «B»
рисунок 7 Закрашивание внутренних областей

На рисунке 6 показан символ, состоящий из 3 контуров. Для того чтобы различать контуры, существуют следующие правила:

  • для каждого символа хранится информация о том, из скольких контуров его строить, а также указывается номер последней точки для каждого контура; как видно из примера 5, контур не обязан завершаться точкой on-curve;
  • для того чтобы строить контур, каждая точка имеет свой индекс, и линии (кривые) рисуются в порядке следования индексов; первый индекс 0; информация о количестве точек ограничена 16-битным числом, то есть теоретически символ может строиться из 65536 точек (точек может быть и больше).

Для того чтобы узнать количество точек, из которого строится символ, нужно посмотреть информацию о последнем индексе последнего контура. Также необходимо просмотреть флаги всех точек. Допускается повтор точек с одними и теми же флагами несколько раз. Количество точек — номер последнего индекса +1, так как нумерация начинается с 0, плюс сумма всех повторяющихся точек.

Заливка символа. Из рисунков 5, 6 видно, что только контуров для построения символов не достаточно. Пространство внутри контура требуется закрасить. Как это сделать, если например символ «B» (рисунок 6) имеет три контура и требуется закрасить только то, что находится между 1-м контуром и 2-м, а также 1-м и 3-м, а то, что внутри 2-го и 3-го — не закрашивать? Для этого ввели ещё правила:

  • внешний контур всегда закрашивается внутри независимо от обхода.
  • внутренний контур закрашивается в зависимости от обхода внешнего контура: если порядок обхода точек совпадает, то внутренняя область закрашивается, если не совпадает, то не закрашивается (рисунок 7).
  • двумя внешними контурами может быть сформирован внутренний: если обход точек двух контуров совпадает, то эта область закрашивается, если не совпадает, то не закрашивается (рисунок 7).

Точки p1 и p4 лежат внутри внешних (наружных) контуров и эта область всегда закрашивается, независимо от обхода точек.

Точка p2 попадает в область между двумя внешними контурами с разными проходами и эта область не закрашивается.

Точки p3 и p5 попадают в области внутренних контуров и закрашивание происходит в зависимости от обхода точек. Точка P3 получается внутри контура с обходом точек против часовой стрелки, в то время как внешний контур имеет обход в другую сторону и из-за этого область 3 не закрашивается. Точка p5 попадает в область с обходом по часовой стрелке, такое же направление обхода, что и у внешнего контура, поэтому область закрашивается.

С точки зрения построения шрифта — область точки p5 избыточна. Данный внутренний объём будет закрашен в любом случае.

Составной символ

Для сокращения числа хранения похожих символов придумали комбинировать два символа в один. Например буква Ё — это буква Е с двумя точками над ней. Точки и Е могут храниться отдельно, а при построении символа «Ё» берётся информация из двух источников.

ЁÄÜÃÑÕÝÚÐØ</лджжджджжзхзэддэддждэхадfont>

Рисунок 8. Пример символов, которые можно сделать комбинированнымиоьхзлдбжбдьжджэдэзжэдюдддддрлороиддпжддщдлдюдэжддждщл

Хинтинг

Несмотря на то, что шрифты в формате TrueType описаны в векторном виде и, казалось бы, должны легко масштабироваться, при отображении символов в низком разрешении могут возникать проблемы. Например, если требуется вписать векторный символ в квадрат размером 16х16 пикселей, значительная часть символа может лишь слегка попасть на один пиксель. Возникает неоднозначность: следует ли закрашивать данный пиксель или оставить его незакрашенным. Для устранения данной неоднозначности в шрифты включают команды-подсказки растеризатору, которые и называют инструкциями хинтинга (хинтования). Формат TrueType позволяет хранить шрифты как с инструкциями хинтинга, так и без них. Но без этих инструкций шрифты считаются некачественными (недобросовестно исполненными), и их стараются не использовать.

Единица измерения шрифта

Единица измерения величины шрифта — point (англо-американский пункт), которая обычно переводится как пункт, и полиграфическая единица измерения величины шрифта (французский пункт), на самом деле не совпадают. Компьютерный пункт равен 0,353 мм, а полиграфический пункт — 0,376 мм. Разница составляет около 7 %. Поэтому при указании кегля обязательно нужно уточнить, какой пункт имеет в виду заказчик, а какой заложен в верстке.

Форматы файлов

Basic

Основной шрифт состоит из нескольких таблиц, указанных в хедере (заголовке). Имя таблицы может иметь до четырёх букв.

Файл TrueType Collection начинается с таблицей "ttcf", которая позволяет доступ к шрифтам в коллекции, указывая на отдельные заголовки для каждого включенного шрифта. Все шрифты коллекции разделяют одну и ту же таблицу контуров глифов, хотя каждый шрифт может ссылаться на свои подмножества очертаний, используя свои «cmap», «name» и «loca» таблицы.

Расширение ".ttf" указывает на обычный TrueType-шрифт или OpenType-шрифт с TrueType-очерчиванием, в то время как расширение ".ttc" зарезервированo для TTC-шрифтов. OpenType-шрифт с очерчиванием PostScript должен иметь расширение .otf. В принципе, OpenType-шрифт с TrueType очерчиванием может иметь расширение .otf, но это редко делается на практике.

Suitcase

Формат suitcase для TrueType используется в классической MacOS. Он добавляет дополнительную Apple-специфическую информацию.

PostScript

В языке PostScript, TrueType-очерчивание фигурирует как PostScript-Тип 42 для шрифтов, где глифы имеют имена, или как тип 11 для CID-шрифтов, где глифы адресуются индексом.

Примечания

  1. Lilley C. The "font" Top-Level Media Type (англ.)IETF, 2017. — 18 p. — doi:10.17487/RFC8081
  2. Developer.Fonts (англ.). Apple Computer, Inc. (18 декабря 2002). — Страничка для разработчика. Общие сведения и различные ссылки. Дата обращения: 18 ноября 2009. Архивировано 15 февраля 2012 года.
  3. FreeType & Patents (англ.) (1 июня 2008). Дата обращения: 18 ноября 2008. Архивировано 15 февраля 2012 года.
  4. TrueType Reference Manual (англ.). Apple Computer, Inc. (18 декабря 2002). — Описание формата TrueType и принципов построения символов. Дата обращения: 3 апреля 2011. Архивировано 15 февраля 2012 года.
  5. OpenType specification version 1.6 (англ.). Microsoft (21 сентября 2009). — Описание формата OpenType и принципов построения символов. Дата обращения: 3 апреля 2011. Архивировано 15 февраля 2012 года.