| GD font center |
|
|
Содержание:
Вряд ли кто-нибудь будет создавать модифицированный фонт с нуля, ведь на свете существует множество фонтов разных форматов, преобразовав которые можно получить искомое. Именно по источнику происхождения оригинального фонта и поделена эта глава на параграфы. Исходные тексты описываемых ниже программ ft2mf, fnt2mf и bdf2mf доступны здесь.
Использование программы ft2mf является общим средством для генерации модифицированного фонта из фонта распознаваемого формата. Программа основана на второй версии библиотеки FreeType, которая способна работать с фонтами широкого круга форматов: TrueType, OpenType, Type1, BDF, CID, CFF, Windows FON/FNT, X11 PCF. Кроме того, при работе с масштабируемыми фонтами FreeType 2 способна создавать полутоновые образы символов фонта с глубиной цвета 8 бит (256 оттенков, а не 5, как в первой версии библиотеки).
Общий формат вызова ft2mf следующий:
Здесь:
| возможный дополнительный файл к фонту, содержащий информацию о кернировании и разную другую метрику. Например, к Type1 фонту старого формата может прилагаться соответствующий AFM файл. | |
| число оттенков в полутоновых образах символов фонта. По умолчению - 1, что означает монохромный образ (без сглаживания). Имеет смысл задавать в качестве color_number степени двойки (4, 8, 16 и т.д.), поскольку в этом случае обеспечивается более рациональное представление модифицированного фонта. Максимальное значение параметра - 256. Если задан немасштабируемый фонт, то color_number принудительно принимает значение 1. | |
| указывает, что в качестве глифовых индексов в файле фонта напрямую должны использоваться коды символов. | |
| задает идентификатор кодировки, который вместе с идентификатором платформы, определяет используемую кодировку фонта. | |
| задает номер начертания фонта. Может понадобиться, если файл фонта содержит в себе несколько вариантов его начертания. | |
| задает горизонтальное разрешение в dpi. По умолчанию - 96 (значение выбрано из соображений совместимости с поддержкой TTF фонтов в библиотеке GD). Применяется только для масштабируемого фонта. | |
| указывает на файл, содержащий карту перекодировки символов фонта. Каждая строка такого файла должна содержать два числа, первое - номер символа в модифицированном фонте (0-255), второе - код символа в оригинальном фонте, по которому будет извлечена битовая карта символа из файла. Коды можно задавать в шестнадцатиричном виде (если начинаются с 0x). Строка комментария в таком фонте должна начинаться с символа #. map_file также задает набор символов, попадающих в модифицированный фонт. По умолчанию, номера символов совпадают с их кодами, а в модифицированный фонт включаются первые 256 символов фонта. Для получения модифицированного фонта из UNICODE фонта в кодировке koi8-r можно воспользоваться картой koi.map, в кодировке windows-1251 - картой win.map. | |
| задает кодировку фонта по ее имени. По умолчанию - unicode. Возможны следующие имена кодировок: symbol, unicode, latin_1, latin_2, sjis, gb2312, big5, wansung, johab, adobe_standard, adobe_expert, adobe_custom и apple_roman. | |
| задает идентификатор платформы, который вместе с идентификатором кодировки, определяет используемую кодировку фонта. В настоящее время в TTF файлах используются четыре значения: 0 для Apple Unicode, 1 для платформы Macintosh, 2 для платформы ISO и 3 для Microsoft. Комбинация font_platform и font_encoding задает некоторую таблицу кодировки, которая должна быть описана в самом TTF файле. | |
| задает размер фонта в точках. Для масштабируемых фонтов эта величина представляет собой лишь некоторое эффективное значение для размера фонта, реальный размер модифицируемого фонта только пропорционален font_size, но не равен ему. По умолчанию - 24 точки. Для немасштабируемого фонта, если не указан font_size, размер фонта определяется самым первым значением из возможных для этого фонта. | |
| определяет дополнительный файл, содержимое которого будет включено в качестве комментария в .c и .h файлы модифицированного фонта. Здесь, например, можно разместить данные правообладания на оригинальный фонт. | |
| задает вертикальное разрешение в dpi. По умолчанию - 96 (значение выбрано из соображений совместимости с поддержкой TTF фонтов в библиотеке GD). Применяется только для масштабируемого фонта. |
Например, создание монохромного модифицированного фонта размером 32 точки в кодировке windows-1251 из Unicode TrueType фонта, находящегося в файле somefont.ttf осуществляется командой:
в результате выполнения которой будут созданы два файла smfnt.c и smfnt.h, содержащих модифицированный фонт с именем mfSomeFont. Для создания сглаженного фонта с глубиной цвета 4 бита можно выполнить такую команду:
Сглаженный фонт может выглядеть более симпатично, но нужно учесть, что в данном случае он будет занимать в 4 раза больше памяти, чем монохромный, поскольку на каждую точку в нем отводится четыре бита.
Из одного масштабируемого фонта можно получить целый набор модифицированных фонтов, различающихся размером фонта (опция -s). Также можно варьировать значения для горизонтального и вертикального разрешения, получая сплюснутый или растянутый модифицированный фонт.
Экранные фонты используются в текстовом режиме работы монитора и, следовательно, являются моноширинными. В их состав входят все 256 символов фиксированного размера, наиболее популярные из которых - 8x8, 8x14 и 8x16. Соответствующие размеры файлов, хранящие битовые карты и обычно имеющие расширение fnt:
| 8x8 | 2048 |
| 8x14 | 3584 |
| 8x16 | 4096 |
Трансформация из экранного фонта в модифицированный осуществляется программой fnt2mf. Программа может обработать экранные фонты только вышеуказанных размеров. Общий формат вызова fnt2mf следующий:
Здесь:
Например, рузультатом выполнения команды
будут два файла
Было бы странным создавать отдельную программу по преобразованию каждого неподдерживаемого программой ft2mf формата фонта в модифицированный фонт, ибо таких форматов может насчитываться очень много. Тем не менее, можно преобразовать фонт, находящийся в каком-то нетрадиционном формате, в простой и удобный промежуточный формат, из которого уже и производить модифицированный фонт. В качестве такого промежуточно формата можно выбрать BDF (Glyph Bitmap Distribution Format), т.к. он стандартизирован, наиболее близок к представлению модифицированного фонта, и практически любой фонт тем или иным способом может быть представлен в BDF формате. Таким образом, схема по преобразованию форматов преобретает такой вид:
| произвольный формат |
BDF формат | модифицированный фонт |
Задачу по преобразованию фонта из BDF формата в модифицированный фонт (помимо собственно ft2mf) может взять на себя программа bdf2mf, общий формат вызова которой следующий:
Здесь:
Например, команда
приведет к созданию двух файлов
Ниже рассматривается другая задача - получение BDF файла для X-фонта нетрадиционного формата.
К оконной системе X (или X Windows), применяемой в операционной среде UNIX, прилагается множество свободных фонтов, в том числе и руссифицированных. Форматы хранения этих фонтов могут различаться, т.к. единого стандарта на них не существует. Однако с помощью программы fstobdf, входящей, по крайней мере, в состав свободно распространяемой системы XFree86, любой X-фонт можно переобразовать к BDF формату. Процедура достаточно проста. Сначала необходимо запустить фонт-сервер (если он еще не запущен):
При этом в конфигурационном файле ConfFile с помощью директивы catalogue должны быть прописаны пути к директориям, в которых храняться доступные X-фонты. Затем, для любого желаемого фонта, скажем, с именем SomeFont, нужно выполнить такую команду (если фонт сервер находится на другом хосте, то вместо localhost надо указать его имя):
Тогда файл somefont.bdf будет содержать BDF-образ выбранного фонта. Например:
Имя желаемого фонта не обязательно нужно задавать в принятой в X нотации, можно указать его простой синоним (это имя должно быть известным X-системе):
Для преобразования множества фонтов это довольно утомительная процедура. С такой задачей может справиться следующая программа:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
int main( void )
{
FILE *stream;
char line[1024], *ptr, *s, cmd[1024];
if( (stream = fopen( "fonts.dir", "r")) == NULL )
{
printf( "Cann't open file 'fonts.dir': %s\n", strerror(errno));
exit( 1 );
}
while( fgets( line, sizeof(line), stream) != NULL )
{
if( (ptr = strchr( line, ' ')) == NULL ) continue;
*ptr++ = '\0';
if( (s = strchr( line, '.')) != NULL ) *s = '\0';
{
int len = strlen(ptr);
if( len > 0 && ptr[len-1] == '\n' ) ptr[len-1] = '\0';
if( ptr[0] == '\0' ) continue;
}
sprintf( cmd, "fstobdf -server localhost:7100 -fn %s > %s.bdf", ptr, line);
system( cmd );
}
fclose( stream );
return 0;
}
Файл fonts.dir, используемый этой программой, может быть найден в каждой директории, указанной в директиве catalogue конфигурационного файла фонт-сервера.
|
|
|