Вход:  Пароль:  
FreeSource: VitalyLipatov/drafts?/fontforge ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |

Font Forge

Контурный редактор шрифтов

Обзор

Font Forge позволяет создавать и редактировать шрифты Post Script?, True Type? и Open Type?. Шрифты возможно сохранять в различных контурных форматах, а также генерировать растровые.

Начальные концепции: шрифты, сплайны, линии, точки, пути и единица изменения em 


Если говорить просто, шрифт представляет из себя набор глифов. Но компьютерные шрифты должны содержать больше информации, как минимум в них должны быть сведения о том, как связать входную последовательность байт с выводом изображения соответствующих глифов. Эта связь называется кодировкой. Многие шрифты также содержат правила, определяющие, как должны быть расположены между соседние глифы. К примеру в шрифтах с латинским алфавитом часто встречается правило, которое говорит что если “f” и “i” соседствуют, тогда специальный глиф, лигатура из “f” и “i” должна быть использована. Шрифты для латинских букв?? обычно не требуют таких правил (но могут быть дополнены ими), шрифты для других письменностей, таких как арабская, требуют их.


В чём отличие между символом и глифом?


Символ – это концепция, а глиф – материализация этой концепции. Буква “A” – это символ,а ?? – это всё глифы, которые представляют “A”. В латинских шрифтах обычно имеется по одину глифу на каждый символ и один символ для каждого глифа, но не всегда — во времена эпохи Возрождения было два глифа для маленькой s, котроткая и длинная s. Лигатура – это пример глифа, который представляет два (или больше) символа. В арабском большинство букв (символов) имеет как минимум четыре различных глифа, соответветсвующий глиф определяется буквами вокруг него. Вот четыре формы арабского символа “seen”: ??


Что такое контурный шрифт? Что такое растровый шрифт?


Каждый глиф в шрифте имеет форму, и существуют различные способы описания этой формы на компьютере. Шрифты Postscript и True Type? обычно описывают контуры фигуры, а после закрашивают внутреннюю часть этого контура; этот процесс называется растеризацией. С другой стороны, растровые шрифты описывают каждый глиф рисованием изображения этого символа на прямоугольной сетке пикселов. Существует третий вид шрифтов, штриховой, в котором каждый штрих (stem) глифа представлен одной линией, проходящей по центру штриха; позднее линия рисуется необходимой ширины. В основном мы не имеем дела со штриховыми шрифтами напрямую (команда Expand Stroke может быть использована для включения их в контуры), но если вы желаете редактировать штриховые шрифты, посмотрите раздел «многослойное редактирование».




Контур состоит из набора контуров или путей (). На самом левом рисунке сверху буква “A” описана тремя различными путями. Основной снаружи и два маленьких внутри. Каждый из этих путей состоит из серии сплайнов и отрезков линий. Font Forge может обрабатывать кубические и квадратичные сплайны. Шрифты Post Script? используют кубические сплайны, шрифты True Type? используют квадратичные.


(сплайн – гибкая линия. – прим. пер.)
Каждый кубический сплайн определяется четырьмя точками, две из которых указывают конечные точки сплайна, а две другие описывают наклон сплайна относительно конечных точек. Вот два примеру кубических сплайнов с показанными точками:


Точкки, описывающие наклон, называются контрольными точками. Они показаны здест и в Font Forge) маленькими цветными “x”. Передвижение контрольных точек будет изменять форму сплайна, но не повлияет на то, где сплайн начинается или заканчивается.


Набор сплайнов и линий соединяется вместе, образуя путь. Существует несколько способов образовывать эти соединения, как показано на примере справа. В каждом случае мы имеет три точки, расположенные примерно одинаково. Три точки соединены сплайнами или линиями, но типы соединений изменяют вид подсоединений.(?)


В первом случае контрольных точек нет и в результате мы имеем две прямых линии. Во втором случае там линия и изогнутый сплайн, который соединяются в точке пересечения. В третьем случае мы видим два сплайна, которые опять же соединяются в точке пересечения. Точка пересечения в данном случае называется угловой точкой (corner point), входящие и выходящие сплайны или линии могут быть расположены произвольно относительно друг друга. Это показывается в Font Forge квадратиком. Во втором случае точка пересечения называется точкой касания, и показывается треугольничком. В третьем случае там точка изгиба (curved point), показываемая кружочком.


Font Forge также позволяет редактировать квадратичные сплайны (сплайны, используемые в шрифтах True Type?), в которых имеется только одна контрольная точка, управляющая наклоном на обеих конечных точках. Посклько квадратичные сплайны не могут быть изогнуты всеми такими же способами, как кубические сплайны (первый сплайн сверху слева потребует как минимум два квадратичных сплайна для изображения), обычно потребуется больше сплайнов, чтобы создать ту же самую кривую. Через команду Element->Font Info возможно управлять будет ли шрифт содержать кубические или квадратичные сплайны.


Путь замыкается когда он возвращается обратно и подсоединяется к началу. Все пути в контурном шрифте должны быть замкнуты. После того как путь замкнут, можно говорить о том, что он имеет направление. Тут важно понимать, «был путь создан по часовой или против часовой стрелки?».(в действительно это упрощение, если путь пересекает сам себя, как на рисунке 8, тогда направление не может быть описано ни как часовое, ни как противочасове, но большинство путей не пересекается с собой (и пути в шрифте НЕ ДОЛЖНЫ самопересекаться), и мы упрощаем жизнь, предполагая, что мы всегда можем называть пути по часовой стрелке или против.


При рисовании контурного глифа требуется сделать чёрным всё внутри контура. Но давайте посмотрим на контур нашей буквы А (на рисунке выше). У нас имеется два пути внтури основного контурного пути, и мы хотим, чтобы внутренность этих двух путей была белая, а не чёрная. Как мы различаем это? Мы определяем это по направлению пути. Рассмотрим любую точку глифа. Если мы нарисуем воображаемую линию от этой точки до бесконечности (в любом направлении) и посчитаем, сколько раз мы пересекаем путь – каждый раз при пересечении пути, созданного против часовой стрелки, прибавляя единичку, и при пересечении пути, созданного по часовой стрелке, убавляя единицу. Если результат наших подсчётов ненулевой, тогда мы окрашиваем точку чёрным, в противном случае оставляем её белой. Так чтобы сделать буквы A нормальной, мы создём внешний путь по часовой стрелке, и два внутренних – против часовой стрелки (это могло бы и по-другому, но удобно, когда внешний путь создан по часовой стрелке).


Все эти точки (конечные точки и контрольные точки) описаны математически. Каждая точка расположена в декартовой системе координат, которая начинается на базовой линии глифа (линия, на которой располагается буква без подстрочных элементов). Большинство шрифтовых форматов ожидают что координаты будут указаны в целых числах от -32768 до 32767, Font Forge внутри использует вещественные числа, но (обычно) округляет их до ближайшего целого при создании шрифтового файла.


При отображении шрифта мы используем слово “em” для обозначения размера шрифта. Если шрифт показывается с размером 12 пунктов, тогда 1em – это 12 пунктов. Если шрифт показывается с размером 18 пунктов, тогда один em будет 18 пунктов. (Обычно шрифт размером в 12 пунктов был таков, что металлическая строка имеет высоту в 12 пунктов — или где расстояние от базовой линии до базовой линии неосвинцованного ? текста – 12 пунктов, так что em был размером металла.)


Пр разработке контурного шрифта вам больше не нужно думать в терминах пунктов – эти шрифты масштабируемы и могут быть любого размера. Вы должны думать в терминах em и дробных частей em. При создании шрифта указывается как много внутренних единиц (называемых em-единицами) используется для представления 1 em. В большинстве шрифтов Post Script? используется 1000 единиц на 1 em, в шрифтах True Type? часто используется значение 1024 или 2048 единиц на 1 em (вы можете выбрать любое число, которое вам нравится (да, оно должно быть меньше чем 32767), эти числа просто условность,а не требование.


Предположим что у вас есть тире в шрифте Post Script?, и это тире имеет длину 500 единиц, а шрифт имеет 1000 единиц на 1 em. Предположим кто-то показывает что тире с размером 12 пунктов. Тогда тире будет нарисовано с длиной 500/1000 * 12 = 6 пунктов. На экране с плотностью 72 точки на дюйм, где точка практически соответствует по размеру одному пункту, тире будет длиной 6 точек (пикселов).


Каждый глиф имеет свою собственную координатную систему. Базовая линия шрифта (линия, над которой расположено большинство латинских глифов) – 0 в вертикальном направлении. Горизонтальное начало – место, где глиф будет начинать рисоваться (обычно это будет некоторое пустое пространство — так как обычно существует некоторый промежуток между началом и краем глифа). Этот горизонтальное расстояние между началом и самым левым краем глифа называется левосторонний валик (bearing) (он может быть отрицательным, положительным или равняться 0). Все глифы имеют ширину (иногда называемую предварительной шириной (advance width), это расстояние от начала текущего глифа до начала следующего. Расстояние между правым углом глифа и шириной называется правосторонним валиком.


Тексты CJK (Китайский, Японский или Корейский) могут быть записаны либо вертикально, либо горизонтально, и поэтому шрифты CJK обычно имеют вертикальную предварительную ширину, так же как и более часто используемую горизонтальную.


Такие глифы как “g” или “y”, продолжающиеся ниже базовой линии, называются descender (строчная буква с нижним выносным элементом), а такие глифы как “k” или “l”, продолжающиеся выше x-высоты, называются ascender (строчная буква с верхним выносным элементом). Большинство латинских (греческих и кириллических) шрифтов имеет некоторую стандартную высоту: высота строчных букв (без ascender) называется x-высотой, высота заглавных букв называется cap-высотой, высота ascenders называется высотой надстрочных знаков (некоторые, но не все шрифты имеют надстрочные знаки и заглавные буквы примерно одинаковой высоты), Обычно это не та же самая высота для всех глифов, буква “O” обычно немного выше чем буква “I”, но они обе находятся в диапазоне размера заглавных букв шрифта.


Шрифт сам по себе имеет надстрочные и подстрочные знаки, связанные с ним. В прежние дни металлических литер ничего не могло располагаться выше ascend или ниже descend, сегодня же надстрочные знаки ????? Сумма ascent и descent и есть размер шрифта. Размер пункта ?? был определён этим значением (по существу высотой блока металла, на котором находился глиф). В шрифтах Post Script? локальная координатная система независит от конечного размера, которым будет рисоваться шрифт. Для удобства в Post Script? сумма ascent и descent – 1000 единиц, в то время как в шрифтах True Type? это обычно степень двойки, 2048.

Отличия шрифтов True Type?, Post Script?, Open Type? и SVG


Font Forge может создавать много типов шрифтов. В чём их отличие?


Post Scipt? основан на технологии кубических сплайнов, в то время как True Type? основан на квадратичной технологии. Кубические сплайны в основном просто редактировать (больше фигур возможно с ними). Любой квадратичный сплайн может быть преобразован в кубический сплайн практически без потерь. Кубический сплайн может быть преобразован в квадратичный сплайн с некоторой погрешностью, но в основном потери точности минимальны. Это означает, что преобразовать контуры True Type? в Post Script? просто, сложнее преобразовать Post Script? в True Type?.


В Font Forge шрифт может содержать либо квадратичные, либо кубические сплайны. Они преобразуются в соответствующий формат при генерации шрифта.


Другое важное отличие между типами шрифтов – то, как они решают проблему создания хороших изображений (букв) на маленьких размерах пунктов. Post Script? называется это хинтинг, а в True Type? это называется инструкциями.


..............
..............


Хинты


При маленьком размере букв процесс рисования внутренней части контурного шрифта достаточно сложен, чтобы выполнить это качественно. Post Script? и True Type? имеют различные средства для решения проблемы, предоставляя дополнительную информацию растеризатору о том, как рисовать маленькие шрифты.


......


Шрифты?


Шрифт – это набор фигур букв и правил для размещения букв вместе. Для примера латинские буквы – это шрифт, содержащий буквы A-Z, пишется слева направо, с преобразованием от заглавных букв к строчным в большинстве случаев, несколько лигатур и правил для генерирования диакритических знаков. Арабский шрифт имеет свой собственный набор символов, пишется справа налево, имеет преобразования для начальных, средних, конечных и изолированных форм, много лигатур и правил для размещения меток громкости.


Якорные точки и классы


Якорные точки позволяет точно управлять расположением двух (или нескольких) глифов. Существует несколько различных стилей прикрепления, основанные на якорях: cursise, отметка базы, отметка лигатуры и расположение от метки к метке. Первый стиль используется для подсоединения глифов в плавающих шрифтах (cursive), где выход из одного глифа подсоединения к входной точке следующего. Во втором стиле один из глифов является базовым глифом, и он будет расположен нормально, другие глифы часто являются диакритическими или гласными (vowel) знаками, и будут расположены так, что якорные точки в каждом глифе совпадают. Отметка лигатуры ведёт себя подобно отметке базы, за исключением того, что там может быть больше чем одна точка приложения для метки, зависящая от того, к какому компоненту лигатуры он подсоединён. Наконец, отметке к метке позволяет расположить две метки с respect между ними (как может потребоваться во вьетнамском или еврейском шрифтах, где может быть несколько меток для одного глифа).


Это плохо сказано. Рассмотрим следующие два глифа и как они соединяются чтобы получить итоговый результат:


Тупое ударение было поднято и передвинуто направо так что его якорная точка расположена там, где был якорь в букве a.


Font Forge не соединяет эти глифы (хорошо, он это может, но это совершенно другая тема). вместо этого он предоставляет информацию в шрифте для программы вёрстки, и она выполняет это соединение.


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


Вот в черне как используются якорные точки. Теперь как это работает.


Шрифт может содержать список якорных классов, который может быть указан через Element->Font Info dialog. Якорный класс состоит из названия (в вышеприведённом примере класс называется “Top”), тэг, набор скриптов и языков к которым он применяется, и тип якоря. Тэг содержателен в контексте таблицы GOPS и пока вы не работаете с языками indic должен оставаться как mark для отметки к базе или ответки к лигатурному соединению. Для соединений cursive используйте тэг 'curs', и для соединений от метки к метке используйте 'mkmk'.


Приложения cursive немного отличаются от других типов приложений. Каждый глиф имеет две точки присоединения, входная и выходная (вместо просто одной, показанной в метке на базе в приведённом примере). Программа вёрстки присоединит выходную точку одного глифа к входной точке другого глифа.


Глиф может содержать несколько якорных точке, но только одна для каждого якорного класса (лигатуры могут иметь больше чем один класс, и 'curs' классы должны иметь два). Вы можете создать точки с использованием команды Point->Add Anchor command. Вы должны указать якорный класс, и будет ли эта точка в базовом глифе или в отмеченном глифе, и расположение. Так в примере выше якорная точка в “a” имеет класс “Top” и базовый глиф, в то время как якорная точка в “grave” имеет класс “Top”, но отмечена как отмеченная. Может существовать много базовых гливов с одной якорной точкой называемой “Top” и много отмеченных глифов также с якорными точками “Top”. Любой базовый глиф с якорной точкой “Top” может быть соединён с любым отмеченным глифом с якорной точкой “Top”. Так вместо указывания точно составленной формы для всех возможных комбинаций мы указыаем несколько якорных точек, получая тот же самый эффект.


Но в действительности жизнь не так проста. Лигатуры могут требовать несколько якорных точек того же самого класс (одну сверху каждого компонента для примера). Когда вы создаёте вашу якорную точку вы можте сказать что она будет в лигатуре, в этом случае вы так же будете спрошены о лигатурном индексе – номере, начинающемся с нуля и не превышающем число компонентов -1. Это позволяет вам размещать несколко якорных точке с тем же самым классом. Программа вёрстки будет размещать первую отметку над первой якорной точкой, вторую отметку над второй и т.д. (примерно так).


Наконец вам может потребоваться расположить две marks based на той той же самой якорной точке, для примера глиф ?? имеет diaeresis и macron над собой. Оба из которых могут быть расположены с использованием якорного класса Top. Вместо этого мы определили специальный класс для расположения метки с respect к другой. При создании якорного класс укажите тэг 'mkmk' (метка к метке) и назовите это "Top Mark?". Когда вы создаёте новую якорную точку для diaeresis вы указываете что это базовая метка и вы располагаете её над глифом, в то время как новая якорная точка в macron должна быть типом меткеи и должны быть расположена на том же самом месте как якорный класс “Top”. Таким образом получив данную последовательность глифов “a diaeresis macron” программа вёрски должна расположить “a” нормально, расположить “diaeresis” так его якорная точка Top там же где и “a”, и расположить macron так что её верхняя якорная точка Top Mark? где имеется “diaeresis”.


Якорные точки могут быть выбраны, перемещены, преобразованы, вырезаны, запомнены и вставлены.

Просмотр шрифта


Просмотр шрифта показывает все глифы в шрифте (или все, которые поместятся в окно), Каждая линия имеет две части, в верхней – метка, обычно буквенная, под ней 24-х пиксельная растеризация шрифта, который вы разрабатываете. Когда вы редактируете глиф в «просмотре контуров глифа», его маленькая версия в окне Просмотр шрифта будет изменяться вместе с вашими исправлениями.


Двойное нажатие на глиф откроет окно с просмотром контуров глифа для выбранного глифа, чтобы позволить вам его редактировать.


Выбор нескольких глифов позволит вам совершать с ними единообразно различные операции, или вырезать и вставлять их.

Просмотр контуров глифа

Просмотр контуров глифа возможно наиболее сложный просмотр в Font Forge. Это место где происходит редактирование сплайнов (Bezier splines), которое создают глифы.


Вы можете иметь загруженное фоновое изображение, помогающее вам отследить контуры, над которыми вы работате (оно отображается серым). Существуют различные видимые линии сетки, некоторые создаются по умолчанию (базовая линия, линия ascent, линия descent, линия по x=0); также вы можете добавлять свои линии.


Существует слой, показывающий хинты глифов.


На переднем плане расположены сплайны и точки самого глифа, и линии ширины (вы можете выравнивать ширину глифа перемещением этой линии). Если точка выбрана, тогда будут отображены её управляющие точки.


Слева от главного окна (изображение ниже показывает его справа – на самом деле вы можете перемещать как угодно) расположены две панели – одна с инструментами и другая с управлением, какой слой (переднего плана, фона, сетка, хинты) показывается и доступен для редактирования.

Просмотр Метрик

Просмотр метрик позволяет вам увидеть как глифы выглядят рядом друг с другом.


Вы можете менять ширину и левые/правые валики глифов, либо переносом в верхней части окна, либо вводом соответствующих чисел внизу.


Вы можете указывать информацию о кернинге для любых двух смежных глифов.



 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]