For faster navigation, this Iframe is preloading the Wikiwand page for TrueType.

TrueType

Материал из Википедии — свободной энциклопедии

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 по умолчанию распространялся с отключённой их поддержкой, и обрабатывал контуры по-другому. В мае 2010 года сроки действия патентов истекли и начиная с версии 2.4 FreeType распространяется с включённой поддержкой таких способов[3].

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

[править | править код]

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

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

Для построения кривой, которая идёт из точки P0 в точку P2 (рисунок 2), требуется три точки: P0, P1 и 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 избыточна. Данный внутренний объём будет закрашен в любом случае.

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

[править | править код]

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

ЁÄÜÃÑÕÝÚÐØ

Рисунок 8. Пример символов, которые можно сделать комбинированными

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

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

[править | править код]

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

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

[править | править код]

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

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

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

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

В языке 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 (англ.) (4 июля 2010). Дата обращения: 23 февраля 2023. Архивировано 6 июля 2007 года.
  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 года.
{{bottomLinkPreText}} {{bottomLinkText}}
TrueType
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?