РНР 5 в подлиннике

Страница 294 из 554


Гпава 30. Работа с изображениями

593

Таблица 30.1 (окончание)

Смещение, байт Тип Описание

12—15 long Высота (в пикселах) каждого знака (height)

От 16 и выше array Массив с информацией о начертании каждого символа, по од-

ному байту на пиксел. На один символ, таким образом, приходится widthxheight байтов, а на все — widthxheightxnchars байтов. О означает отсутствие точки в данной позиции, все остальное — ее присутствие

Замечание J

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

Параметры шрифта

После того как шрифт загружен, его можно использовать (встроенные шрифты, конечно же, загружать не требуется).

int imageFontHeight(int $font)

Возвращает высоту в пикселах каждого символа в заданном шрифте.

int imageFontWidth(int $font)

Возвращает ширину в пикселах каждого символа в заданном шрифте.

Вывод строки

int imageString(int $im, int $font, int $x, int $y, string $s, int _$col)

Выводит строку $s в изображение $im, используя шрифт $font и цвет $coi. Пара ($х, $у) будет координатами левого верхнего угла прямоугольника, в который вписана строка.

int imagestringUp (int $im, int $font, int $x, int $y, string $s, int $c)

Эта функция также выводит строку текста, но не в горизонтальном, а в вертикальном направлении. Верхний левый угол, по-прежнему, задается координатами ($х, $у).

Работа со шрифтами TrueType

Библиотека GD поддерживает также работу с векторными масштабируемыми шрифтами PostScript и TrueType. Мы с вами рассмотрим только последние, т. к., во-первых, их существует великое множество (благодаря платформе Windows), а во-вторых, с ними проще всего работать в РНР.

594

Часть IV. Стандартные функции РНР

(__Замечание )

Для того чтобы заработали приведенные ниже функции, РНР должен быть откомпилирован и установлен вместе с библиотекой FreeType, достулной по адресу http:// www.freetype.org. В Windows-версии РНР она установлена по умолчанию. Большинство хостинг-провайдеров добавляют ее и под Unix.

Всего существуют две функции для работы со шрифтами TrueType. Одна из них выводит строку в изображение, а вторая — определяет, какое положение эта строка бы заняла при выводе.

Вывод строки

list imageTtf Text (int $im, int $size, int $angle, int $x, int $y, int $col, string $fontfile, string $text)

Эта функция помещает строку Stext в изображение Sim цветом $col. Как обычно, $coi должен представлять собой допустимый идентификатор цвета. Параметр $angie задает угол наклона в градусах выводимой строки, отсчитываемый от горизонтали против часовой стрелки. Координаты (Sx, Sy) указывают положение так называемой базовой точки строки (обычно это ее левый нижний угол). Параметр $size задает размер шрифта, используемый при выводе строки. Наконец, $ font file должен содержать имя TTF-файла, в котором, собственно, и хранится шрифт.

Внимание!

Параметр $fontfiie должен всегда задавать абсолютный путь (от корня файловой системы) к требуемому файлу шрифтов. Что самое интересное, в некоторых версиях РНР функции все же работают с относительными именами. Но в любом случае лучше подстелить соломку— абсолютные пути еще никому не вредили, не правда ли?.. Если у вас в программе задано относительное имя TTF-файла, используйте realpath () для конвертации его в абсолютное.

Функция возвращает список из 8 элементов. Первая их пара задает координаты (х, у) верхнего левого угла прямоугольника, описанного вокруг строки текста в изображении, вторая пара — координаты верхнего правого угла, и т. д. Так как в общем случае строка может иметь любой наклон $angie, здесь требуются 4 пары координат.

Внимание!

И, тем не менее, функция всегда возвращает координаты так, будто бы угол Sangle равен нулю.

Пример использования этой функции мы рассмотрим чуть ниже.

Проблемы с русскими буквами

Если вы хотите выводить текст, содержащий русские буквы, то должны вначале перекодировать его в специальное представление. В этом представлении каждый знак кириллицы имеет вид &#хххх, где хххх— код буквы в кодировке Unicode. Знаки препинания и символы латинского алфавита в перекодировании не нуждаются.

Ниже, в листинге 30.7, мы рассмотрим функцию tounicodeEntities о, которая производит все необходимые преобразования.




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006