ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.05.2024
Просмотров: 618
Скачиваний: 0
ей, таким, как A, Ж, M, О, T, Ф, Ш, и некоторым другим. Нарушение симметричности таких символов (например, возникновение разного расстояния между вертикальными штрихами буквы Ш) резко искажает их форму и затрудняет чтение текста.
Рисунок 6.2 Пример масштабирования символа Н
Нарушение единства символов. Применяя некоторые прие-
мы, мы можем избавиться от ошибок округления применительно к одному символу. Ho при этом мы рискуем потерять единство символов в шрифте. Например, если в символе H мы будем округлять толщину вертикальных штрихов в меньшую сторону, а в символе Ш - в большую, то некоторые слова станут трудно воспринимаемыми. Кроме того, при таком подходе нарушается ритмичность шрифта (характерный случай – разное округление расстояния между вертикальными штрихами в символах Ш и Щ).
Рисунок 6.3 Пример смыкания элементов символа
Другой пример - масштабирование положения горизонтальных линий (например, средних линий символов в, e, ж, з, к) и величины оптических наплывов у округлых букв (таких, как а, б, e, з, о, с). B первом случае может возникнуть неприятный разнобой в некоторых сло-
- 148 -
вах, а во втором - искажение базовой линии текста и скачки букв в вертикальном направлении.
Смыкание штрихов. B некоторых случаях некачественного масштабирования штрихи и другие элементы символов смыкаются между собой. Наиболее часто это происходит с вертикальными штрихами в узких шрифтах. Ошибочное соединение штрихов (Рисунок 6.3) нарушает графему такой буквы, и человек теряет способность к ее распознаванию.
Рисунок 6.4 Пример выпадения точек при заполнении контура
Выпадение точек. Если не обращать внимания на прохождение линий при округлении координат опорных точек контура, то часто возникают ситуации, в которых программа заполнения масштабированного контура не может определить, какие именно растровые точки необходимо активизировать. Как правило, эта проблема возникает при заполнении тонких наклонных элементов (Рисунок 6.4).
Нарушение формы округлых букв. Этот дефект не так резко,
как другие, влияет на удобство восприятия текста. Он «только» искажает форму символов, имеющих большие округлые элементы, например B, О, 3, P, C, а, б и др. Вопрос о заполнении таких элементов можно решать разными способами, но лишь некоторые из них позволяют получить действительно качественное изображение буквы, а остальные приводят к подобным ошибкам, приведенным на Рисунок 6.5.
Теперь, когда мы выявили некоторые проблемы, связанные с растеризацией символов, рассмотрим методы устранения этих проблем. Для этого, прежде всего, введем понятие разметки шрифта. Разметкой мы будем называть описание символов, их элементов и шрифта в целом, призванное улучшить качество растеризации символов. Иногда разметку называют хинтовкой (от англ. hint - подсказка), но этот термин обычно относят к шрифтам в формате Type 1 (для TrueType шрифтов используют понятие инструкций) , поэтому мы счи-
- 149 -
таем необходимым ввести новый, более общий, термин.
Рисунок 6.5 Нарушение формы округлых букв
Методы разметки символов
Существует два основных метода разметки символов контурных шрифтов: декларативный и программируемый. Первый применяется в формате Adobe Type 1, а второй - в TrueType шрифтах.
Декларативный метод разметки
Этот метод основан на описании особенностей символа при помощи их декларирования отдельно от описания контура (Рисунок 6.6). To есть описание символа при этом включает в себя две части: математическое описание контура символа и декларирование его особенностей:
Задачу связывания этих частей и построения правильных ассоциаций решает программа растеризации. Именно она анализирует форму символа, связывает ее с заданной разметкой и принимает решения об изменении контура в ходе его масштабирования и заполнения. Таким образом, в шрифтовой машине, разметка символов в которой производится декларативным методом, основную часть работы по улучшению формы символов выполняет растеризатор. Обычно он представляет собой довольно сложную программу, содержащую множество высокоэффективных алгоритмов (ведь символы приходится воспроизводить очень быстро) и элементы искусственного интеллекта.
- 150 -
Рисунок 6.6 Элементы разметки при декларативном методе
Огромное преимущество декларативной разметки - простота построения шрифтов. Так как производителей шрифтов намного больше, чем производителей растеризаторов, применение этого метода приводит к более быстрому появлению новых гарнитур.
Программируемый метод разметки
Программируемый метод основан на точном определении в шрифте всех действий, которые должен выполнять растеризатор. Ha долю растеризатора при этом остаются только интерпретация команд разметки и как можно более быстрое их выполнение. Растеризатор оказывается более простым, компактным и быстрым, но это происходит за счет резкого усложнения шрифтов и увеличения их в объеме. Программа разметки может быть очень сложной, имеющей циклы, условные переходы, описания переменных и массивов (Рисунок 6.7). Языки программирования разметки обычно имеют много команд модификации контуров символов, причем среди них есть как команды, работающие на этапе масштабирования контура, так и на этапе его заполнения.
B программируемом методе разметки используются не ассоциативные декларации, а точное указание взаимодействия между точками.
Потенциально программируемая разметка может обеспечить намного лучшее качество, чем декларативная, но создание высококачественных шрифтов, использующих программы разметки, оказывается настолько трудоемким, что таких шрифтов появляется довольно мало. Обычно производители таки шрифтов (а это все TrueType-
- 151 -
шрифты) применяют специальные системы, автоматически формирующие программы разметки символов и шрифта.
Такой путь обычно приводит к невысокому качеству растеризации шрифтов, так что потенциальное преимущество программируемой разметки теряется.
Рисунок 6.7 Элементы разметки при программируемом методе
Общая структура шрифта в формате Type 1
Любой Type 1 шрифт состоит из двух основных частей: открытой и закрытой (зашифрованной):
Открытая часть |
Закрытая часть |
||
• |
Обозначение шрифта |
• |
Область глобальной разметки |
• |
Заголовок шрифта |
• |
Область глобальных подпрограмм |
• |
Кодовая таблица шрифта |
• Область подпрограмм разметки и |
|
• |
Уникальный идентификатор |
|
контурных подпрограмм |
|
шрифта |
• |
Область описаний символов |
Открытая часть. B открытой части Type 1 шрифта содержится информация, доступная для любого текстового редактора. Эта часть может быть изменена при условии, что закрытая часть останется нетронутой. B открытой части можно выделить 4 области.
•Обозначение шрифта показывает, что файл является именно шрифтом:
%!PS-AdobeFont-1.0: TimeRoman 001.1
- 152 -
%%CreationDate: Wed Oct 20 17:08:26 1993 %%Creator: FontLab(c) forWindowsv2.5
•Заголовок шрифта, в котором хранится следующая информация:
FontName |
Регистрационное имя шрифта |
FullName |
Полное имя шрифта |
FamilyName |
Имя гарнитуры, в которую входит |
|
шрифт |
Version |
Наименование версии шрифта |
Notice |
Информация о создателях шрифта и |
|
об авторских правах на шрифт |
Weight |
Информация о насыщенности шрифта |
ItalicAngle |
Угол наклона символов шрифта в гра- |
|
дусах против часовой стрелки |
IsFixedPitch |
Информация о том, является ли шрифт |
|
моноширинным |
UnderlinePosition |
Положение линии подчеркивания |
UnderlineThickness |
Толщина линии подчеркивания |
PaintType |
Вид шрифта: 0 - сплошной (заполняе- |
|
мый); 1 - контурный. Все Type 1 шриф- |
|
ты являются сплошными |
FontType |
Тип шрифта: 0 - Type 0 шрифт (состав- |
|
ной); 1 - Type 1 шрифт; 3 - Type 3 |
|
шрифт. |
FontMatrix |
Стандартная матрица трансформиро- |
|
вания символов. Ее более подробное |
|
описание приведено в разделе «Опи- |
|
сание символов». |
FontBBox |
Минимальный прямоугольник, охваты- |
|
вающий все символы шрифта. |
Приведем пример типичного заголовка Type 1 -шрифта:
/FontInfo 9 dict dup begin
/FullName (Times New Roman) readonly def /FamilyName (Times) readonly def
/version (001.1) readonly def /Weight (Normal) readonly def
/Notice ((c) Copyright Monotype, 1990) readonly def /ItalicAngle 0 def
/isFixedPitch false def /UnderlinePosition-100 def /UnderlineThickness 50 def
end readonly def
- 153 -