PHP-4 Эффективная работа


Установка средств графической поддержки
Функции поддержки работы с графикой
Небольшие графические объекты

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-3int Количество символов в шрифте
4-7int Код первого символа в шрифте (обычно 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
назад
далее

Сайт управляется системой uCoz