Установка средств графической поддержки
Функции поддержки работы с графикой
Небольшие графические объекты
17.2.5. Работа с текстом и шрифтами
17.2.5.1. Высота матрицы шрифта: ImageFontHeight
int imagefontheight (int font)
Функция возвращает высоту символов указанного шрифта в пикселах.
17.2.5.2. Ширина матрицы шрифта: ImageFontWidth
int imagefontwidth (int font)
Функция возвращает ширину символов указанного шрифта в пикселах.
17.2.5.3. Загрузка шрифта: ImageLoadFont
int imageloadfont (string file)
Функция ImageLoadFont () предназначена для загрузки пользовательского растрового шрифта и возвращает идентификатор, под которым этот шрифт зарегистрирован в системе. Это значение всегда больше 5 (идентификаторы от 1 до 5 выделены для встроенных в систему шрифтов).
Формат шрифта в общем случае зависит от архитектуры машины. Это означает,
что вы должны сгенерировать бинарное описание шрифта на той же машине, где
будет работать PHP-машина (см. табл. 17.1).
Таблица 17.1. Формат файла с описанием шрифта
Смещение | Тип данных | Описание
| 0-3 | int | Количество символов в шрифте
| 4-7 | int | Код первого символа в шрифте (обычно 32 — пробел)
| 8-11 | int | Ширина каждого символа
| 12-15 | int | Высота каждого символа
| 16 и старше | char | Массив символьных данных, один бит на пиксел. Общий размер массива — nchars x width x height (байтов)
|
См. также описание функций ImageFontWidth () (раздел 17.2.5.2) и ImageFontHeightO
(раздел 17.2.5.1).
17.2.5.4. Размер текстовой области Postscript: ImagePSBBox
array imagepsbbox (string text, int font,
int size [, int space [, int tightness
t, float angle]]])
Функция предназначена для определения размера прямоугольной области, необходимой для вывода текста text заданным Postscript-шрифтом font с указанными параметрами.
Следует сразу отметить, что size задается в пикселах. Аргумент space позволяет
задать размер пробела. Это дополнительное значение, показывающее, на какую
величину необходимо увеличить или уменьшить (если значение отрицательное)
стандартный размер пробела.
Аргумент tightness позволяет вам управлять размером пространства между буквами. Это значение показывает, на какую величину необходимо увеличить или
уменьшить (если значение отрицательное) межбуквенный интервал.
Аргумент angle задает угол наклона шрифта и вводится в градусах.
Аргументы space и tightness представляются в условных единицах, которые равны не одному доллару, как вы могли бы подумать, а 1/1000 ширины буквы «т»
текущего шрифта.
примечание
Описывающий выводимую строку прямоугольник рассчитывается на основе информации, получаемой из метрики шрифта, что, конечно же, приводит к возникновению некоторых искажений, поскольку при выводе Postscript-шрифтов в изображение они предварительно преобразуются в растровые изображения. В частности, если angle равен 0 (по
умолчанию), то вы можете рассчитывать, что для вывода текста нужно будет на 1 пиксел
больше в каждом направлении.
Результатом работы функции является массив, содержащий следующие элементы:
0 нижняя левая х-координата
1 нижняя левая у-координата
2 верхняя правая х-координата
3 верхняя правая у-координата
17.2.5.5. Перестройка вектора кодировки: ImagePSEncodeFont
int imagepsencodefont (int f ont_i ndex, string encodingfile)
Функция загружает из файла encodi ngf i le вектор кодировки символов и приводит в соответствие с ним кодировку шрифта, зарегистрированного под номером
font_index. Необходимость этой операции, как вы понимаете, связана с желанием
использовать кириллические Postscript-шрифты. Понятно, что для этого вы должны
прежде всего иметь шрифты с кириллицей, а также установить библиотеку T1lib.
примечание
К сожалению, исходные файлы библиотеки содержат только две кодировки, IsoLatinl.enc
и IsoLatin2.enc, поэтому вам придется попотеть.
Вполне возможно, что вам понравится работать с Postscript-шрифтами, хотя, на
мой взгляд, для генерируемой графики это слишком. В этом случае вы можете включить созданную вами кодировку в конфигурационный файл и использовать ее по
умолчанию.
17.2.5.6. Выгрузка Postscript-шрифта: ImagePSFreeFont
void imagepsfreefont (int fontindex)
Функция предназначена для освобождения памяти, занятой шрифтом Postscript,
который был загружен в PHP-машину с помощью функции ImagePSLoadFont ()
(см. раздел 17.2.5.7).
17.2.5.7. Загрузка шрифта Postscript: ImagePSLoadFont
int imagepsloadfont (string filename)
Функция осуществляет загрузку и регистрацию в PHP-машине шрифта Postscript,
содержащегося в заданном файле. В случае успешной загрузки возвращается идентификатор шрифта. В противном случае функция возвращает false и генерирует
сообщение об ошибке.
17.2.5.8. Масштабирование шрифта: ImagePsExtendFont
bool imagepsextendfont (int font_index, double extend)
Функция расширяет или, наоборот, сжимает шрифт Postscript, адресуемый указателем font_index. Если значение аргумента extend больше 1, шрифт будет расширен, а если меньше — то сжат.
17.2.5.9. Наклонный шрифт: ImagePsSlantFont
bool imagepsslantfont (int font_index, double slant)
Функция преобразует исходный шрифт Postscript в наклонный. Угол наклона
определяется значением параметра slant.
17.2.5.10. Отрисовка текста: ImagePSText
array imagepstext (int image, string text, int font,
int size, int foreground, int background,
int x, int у [, int space [, int tightness
[, float angle [, int antialias_steps]]]])
Функция предназначена для отрисовки в изображении image текста text с помощью Postscript-шрифта, зарегистрированного под номером font. Аргумент size
определяет высоту используемого шрифта и задается в пикселах.
Аргументы foreground и background определяют цвета текста и фона соответственно. Под фоном в данной функции понимается цвет, на который необходимо
ориентироваться во избежание слияния выводимого текста. Вывод пикселов с цветом фона не производится, поэтому нет никакой необходимости в использовании
однотонной «подстилающей поверхности» — значение цвета фона носит «справочный» характер.
Координаты (х, у) определяют нижнюю левую позицию первой буквы выводимого текста.
Аргумент space позволяет задать размер пробела, используемого при выводе данной строки. Значение аргумента показывает, на какую величину необходимо увеличить или уменьшить (если значение отрицательное) стандартный размер пробела.
Аналогичным образом аргумент tightness позволяет управлять межбуквенным
интервалом. Оба эти аргумента задаются в условных единицах, которые равны 0,001
от ширины буквы «т» в данном шрифте.
Угол angles определяет направление вывода шрифта и задается в градусах.
Аргумент antialias_steps позволяет вам задать количество цветов, вовлеченных в построение строки, не сливающейся с фоном. В настоящее время вы можете
В отличие от функции ImageString(), в которой задается правый верхний угол первого символа!
указать либо 4, либо 16 цветов. Для шрифтов, размер которых меньше 20, используйте 16 цветов, а для шрифтов большего размера достаточно 4. Кроме того, в этом
случае вывод осуществляется заметно быстрее.
Результатом работы функции является следующий массив:
0 нижняя левая х-координата
1 нижняя левая у-координата
2 верхняя правая х-координата
3 верхняя правая у-координата
См. также описание функции ImagePSBBox( ) (раздел 17.2.5.4).
17.2.5.11. Вывод строки: ImageString
int imagestring (int im, int font, int x, int y, string s, int col)
Функция ImageString( )осуществляет вывод в изображение текстовой строки
начиная с координат (х, у). Эти координаты определяют позицию правого верхнего угла первой выводимой буквы строки. Началом координат является левый верхний угол «холста». Аргумент col определяет цвет изображения.
17.2.5.12. Вертикальный вывод строки: ImageStringUp
int imagestringup (int im, int font, int x, int y, string s, int col)
Функция ImageStri ngUp() отрисовывает строку s в вертикальном направлении
начиная с координат (х, у). Эти координаты определяют позицию правого верхнего угла первой выводимой буквы строки. Началом координат является левый верхний угол «холста». Аргумент col определяет цвет изображения.
17.2.5.13. Размер TTF-строки: ImageTTFBBox
array imagettfbbox (int size, int angle, string fontfile, string text)
Функция вычисляет размер зоны, описывающей текст, выводимый с помощью
TTF-шрифтов, и возвращает ее параметры в виде массива, который содержит 8 элементов (табл. 17.2).
Возвращаемые точки не зависят от направления вывода текста, поэтому термин
«левый нижний» обозначает координаты точки относительно горизонтального
расположения текста.
Аргументы функции:
text | Строка, размеры которой необходимо измерить
| size | Размер шрифта в пикселах
| fontfile | Имя файла со шрифтами TrueType (может быть задан как URL)
| angle | Угол в градусах, определяющий направление вывода текста
|
Таблица 17.2. Массив значений, возвращаемый функцией ImageTTFBBox
Индекс | Значение | Координата
| 0 | Нижний левый угол | X
| 1 | Нижний левый угол | Y
| 2 | Нижний правый угол | X
| 3 | Нижний правый угол | Y
| 4 | Верхний правый угол | X
| 5 | Верхний правый угол | Y
| 6 | Верхний левый угол | X
| 7 | Верхний левый угол | Y
|
|