TrueType
| Расширение |
|
|---|---|
TrueType (ТруТайп) в формат компьютерных шрифтов, разработанный фирмой Apple в конце 1980-х годов.
Шрифты в данном формате используются во многих современных операционных системах. Файлы с такими шрифтами имеют расширение имени «ttf». В зависимости от версии формата, максимальное количество хранимых символов может ограничиваться значениями 28, 216 или 232[1].
Содержание |
[править] Свободное ПО
В ОС на основе свободного ПО для работы с данными шрифтами используется свободная библиотека FreeType, поддерживающая этот и другие форматы шрифтов.
Apple принадлежат три патента, имеющие отношение к некоторым способам обработки контуров шрифтов TrueType для вывода при маленьком размере. Так как эти патенты могут препятствовать свободному использованию таких способов, FreeType по умолчанию распространяется с отключённой их поддержкой, и обрабатывает контуры по-другому[2].
[править] Принцип хранения информации о символе
TrueType формат создан для хранения информации o контуре символа (векторное изображение). В отличие от растрового символа в векторный легко масштабируется. Но и у векторного способа хранения есть свои недостатки. Для того чтобы однозначно понимать (интерпретировать) записанную информацию, пользуются следующими правилами[3][4]:
информация о линии контура хранится в виде точек
прямая линия контура строится по двум точкам начальной и конечной (Рисунок 1).
элемент дуги строится методом Безье. Начало и конец кривой описываются точками, которые лежат на самой кривой. Остальные точки, не принадлежащие кривой служат для построения дуг (Рисунок 2).
Для построения кривой (рисунок 2) требуется три точки: P0, P1, P2, которая идёт из точки P0 в точку P2. P1 не лежит на кривой и служит для определения её кривизны. Для расчёта каждой точки кривой воспользуемся формулой 1:
P(t) = (1-t)2P0 + 2t(1-t)P1 + t2P2 (формула 1)
На рисунке 3 приведён пример сложной кривой, которая состоит из двух простых. На рисунке 4 та же самая кривая, но точка P2 отсутствует. Её координаты восстанавливают. Например в данном случае точка P2 лежит по середине отрезка P1 P3. Подробнее об этом можно почитать в описании построения кривой Безье, квадратичный метод.
Итак, для построения контура используется два вида точек. Один тип в это точка, лежащая на контуре, является началом одной кривой или отрезка и концом другой. Другой вид точек в это точки не лежащие на контуре и являются контрольными точками для построения кривой. Между двумя кривыми может отсутствовать координатная точка и её придётся восстанавливать.
Следующее правило:
первая и последняя точка контура замыкаются. То есть контур не может быть не замкнутым. Обязательно строится отрезок или кривая из последней точки в первую.
На рисунке 5 показан прием построения одноконтурного символа «С». Контур состоит как из отрезков, так и из кривых. Или, говоря дословно, для построения этого символа использовались точки лежащие на контуре on-curve и контрольные точки (не лежащие на кривой off-curve). 25 точка смыкается с 0. 26, 27 точки являются контрольными (off-curve) и служат для построения кривой 25-0.
На рисунке 6 показан символ, состоящий из 3х контуров. Для того чтобы различать контуры, существуют следующие правила:
Для каждого символа хранится информация о том, из скольких контуров его строить, а также указывается номер последней точки для каждого контура.
Как видно из примера 5, контур не обязан завершаться on-curve точкой.
Для того чтобы строить контур, каждая точка имеет свой индекс, и линии (кривые) рисуются в порядке следования индексов. Первый индекс 0. Информация о количестве точек ограничена 16 битным числом то есть теоретически символ может строиться из 65536 точек(точек может быть и больше).
Для того чтобы узнать количество точек из которого строится символ, нужно посмотреть информацию о последнем индексе последнего контура. Также необходимо просмотреть флаги всех точек. Допускается повтор точек с одними и теми же флагами несколько раз. Количество точек в номер последнего индекса +1, так как нумерация начинается с 0, плюс сумма всех повторяющихся точек.
Заливка символа. Из рисунков 5, 6 видно, что только контуров для построения символов не достаточно. Пространство внутри контура требуется закрасить. Как это сделать, если например символ «B», рисунок 6, имеет три контура и требуется закрасить только то, что находится между 1 м контуром и 2 м, а также 1 м и 3 м. А то, что внутри 2го и третьего в не закрашивать. Для этого ввели ещё правила:
Внешний контур всегда закрашивается внутри независимо от обхода.
Внутренний контур закрашивается в зависимости от обхода внешнего контура. Если порядок обхода точек совпадает, то внутренняя область закрашивается, если не совпадает, то не закрашивается (рисунок 7).
Двумя внешними контурами может быть сформирован внутренний. Если обход точек двух контуров совпадает, то эта область закрашивается, если не совпадает, то не закрашивается (рисунок 7).
Точки p1 и p4 лежат внутри внешних (наружных) контуров и эта область всегда закрашивается, не зависимо от обхода точек.
Точка p2 попадает в область между двумя внешними контурами с разными проходами и эта область не закрашивается.
Точки p3 и p5 попадают в области внутренних контуров и закрашивание происходит в зависимости от обхода точек. Точка P3 получается внутри контура с обходом точек против часовой стрелки, в то время как внешний контур имеет обход в другую сторону и из-за этого область 3 не закрашивается. Точка p5 попадает в область с обходом по часовой стрелке, такое же направление обхода, что и у внешнего контура, поэтому область закрашивается.
С точки зрения построения шрифта в область точки p5 избыточна. Данный внутренний объём будет закрашен в любом случае.
[править] Составной символ
Для сокращения числа хранения похожих символов придумали комбинировать два символа в один. Например буква Ё в это буква Е с двумя точками над ней. Точки и Е могут хранится отдельно, а при построении Ё символа, берётся информация из двух источников.
ЁÄÜÃÑÕÝÚÐØ
Рисунок 8 Пример символов, которые можно сделать комбинированными
[править] Хинтинг
Несмотря на то, что шрифты в формате TrueType описаны в векторном виде и, казалось бы, должны легко масштабироваться, при отображении символов на низком разрешении могут возникать проблемы. Например, если требуется вписать векторный символ в квадрат размером 16х16 пикселей, значительная часть символа может лишь слегка попасть на один пиксель. Возникает неоднозначность: следует ли закрашивать данный пиксель или оставить его незакрашенным. Для устранения данной неоднозначности в шрифты включают команды-подсказки растеризатору, которые и называют инструкциями хинтинга (хинтования). Формат TrueType позволяет хранить шрифты как с инструкциями хинтинга, так и без них. Но без этих инструкций шрифты считаются некачественными (недобросовестно исполненными), и их стараются не использовать.
[править] Единица измерения шрифта
Единица измерения величины шрифта в point (англо-американский пункт), которая обычно переводится как пункт, и полиграфическая единица измерения величины шрифта (французский пункт), на самом деле не совпадают. Компьютерный пункт равен 0,353 мм, а полиграфический пункт в 0,376 мм. Разница составляет около 7 %. Поэтому при указании кегля обязательно нужно уточнить, какой пункт имеет в виду заказчик, а какой заложен в верстке.
[править] Примечания
- в‘ Developer.Fonts (англ.). Apple Computer, Inc. (18 декабря 2002). в Страничка для разработчика. Общие сведения и различные ссылки.. Архивировано из первоисточника 15 февраля 2012. Проверено 18 ноября 2009.
- в‘ FreeType & Patents (англ.) (1 июня 2008). Архивировано из первоисточника 15 февраля 2012. Проверено 18 ноября 2008.
- в‘ TrueType Reference Manual (англ.). Apple Computer, Inc. (18 декабря 2002). в Описание формата TrueType и принципов построения символов. Архивировано из первоисточника 15 февраля 2012. Проверено 3 апреля 2011.
- в‘ OpenType specification version 1.6 (англ.). Microsoft (21 сентября 2009). в Описание формата OpenType и принципов построения символов. Архивировано из первоисточника 15 февраля 2012. Проверено 3 апреля 2011.
| Это заготовка статьи о программном обеспечении. Вы можете помочь проекту, исправив и дополнив её. |
| Это заготовка статьи о шрифтах. Вы можете помочь проекту, исправив и дополнив её. |

