Приднестровская поддержка XOOPS
Для вывода текста используются следующие функции:
□ imagechar() рисует символ на изображении по горизонтали:
imagechar(<Идентификатор>, <Шрифт>, <X>, <Y>, <Символ>, <Цвет>);
□ imagecharup() рисует символ на изображении по вертикали:
imagecharup(<Идентификатор>, <Шрифт>, <X>, <Y>, <Символ>, <Цвет>);
□ imagestring() отображает строку на изображении по горизонтали:
imagestring(<Идентификатор>, <Шрифт>, <X>, <Y>, <Строка>, <Цвет>);
□ imagestringup() отображает строку на изображении по вертикали:
imagestringup(<Идентификатор>, <Шрифт>, <X>, <Y>, <Строка>, <Цвет>);
В этих функциях параметр <Шрифт> задает размер встроенного шрифта, который выражается числом от 1 до 5.
Все четыре функции с буквами русского языка не работают. Для русского языка следует использовать TrueType-шрифты (например, arial.ttf). В Windows XP шрифты расположены в папке C:\Windows\Fonts. Для работы с TrueType-шрифтами используются следующие функции:
□ imagettftext() рисует строку на изображении TrueType-шрифтом. Функция возвращает массив координат 4-х вершин прямоугольника, в который будет вписан текст. Вершины перечисляются в следующем порядке: нижняя левая, нижняя правая, верхняя правая, верхняя левая.
Формат вызова функции:
imagettftext(<Идентификатор>, <Размер>, <Угол>, <X>, <Y>, <Цвет>, <Шрифт>, <Строка>);
Параметры имеют следующий смысл:
• <X> и <Y> — координаты левой крайней точки базовой линии;
• <Размер> — размер шрифта;
• <Угол> — угол поворота текста. Угол 0 соответствует обычному горизонтальному расположению текста, а поворот осуществляется против часовой стрелки;
• <Шрифт> — имя файла со шрифтом.
Например, следующий код
$img = imagecreate(200, 200);
$red = imagecolorallocate($img, 255, 0, 0);
$black = imagecolorallocate($img, 0, 0, 0);
$text = 'Testing...';
$fontfile = "C:/WINDOWS/Fonts/arial.ttf";
$arr = imagettftext($img, 20, 0, 11, 21, $black, $fontfile, $text);
print_r($arr);
выведет в PHP 5.2 (1)
Array ( [0] => 12 [1] => 27 [2] => 115 [3] => 27 [4] => 115 [5] => 2 [6] => 12 [7] => 2 )
Это означает, что текст вписан в такой прямоугольник:
• 12, 27 — координаты левого нижнего угла;
• 115, 27 — координаты правого нижнего угла;
• 115, 2 — координаты правого верхнего угла;
• 12, 2 — координаты левого верхнего угла;
□ imagettfbbox() возвращает координаты прямоугольника, в который вписана строка с помощью TrueType-шрифта;
imagettfbbox(<Размер>, <Угол>, <Шрифт>, <Строка>);
Например, такой код
$text = 'Testing...';
$fontfile = "C:/WINDOWS/Fonts/arial.ttf";
$arr = imagettfbbox(20, 0, $fontfile, $text);
print_r($arr);
выведет в PHP 5.2 (1)
Array ( [0] => 0 [1] => 5 [2] => 103 [3] => 5 [4] => 103 [5] => -20 [6] => 0 [7] => -20 )
Это означает, что заданный текст, выведенный под заданным углом таким шрифтом и размером, помесится в прямоугольник со следующими координатами:
• 0, 5 — левый нижний угол;
• 103, 5 — правый нижний угол;
• 103, -20 — правый верхний угол;
• 0, -20 — левый верхний угол.
В качестве примера создадим счетчик посещения с использованием cookies и выведем результат в графическом виде (листинг 66).
Листинг 66. Счетчик посещений
<?php
if (!isset($_COOKIE['id_count'])) $id_count = 0;
else $id_count = $_COOKIE['id_count'];
$id_count++;
setcookie('id_count', $id_count, 0x6FFFFFFF);
header("Content-type: image/png");
$img = imagecreate(88, 31);
$white = imagecolorallocate($img, 255, 255, 255);
$grey = imagecolorallocate($img, 128, 128, 128);
$black = imagecolorallocate($img, 0, 0, 0);
imagerectangle($img, 0, 0, 87, 30, $black);
$fontfile = 'C:/Windows/Fonts/arial.ttf';
$str = 'Мой счетчик';
$str = iconv("windows-1251", "UTF-8", $str);
imagettftext($img, 8, 0, 11, 13, $grey, $fontfile, $str);
$mass = imagettfbbox(12, 0, $fontfile, $id_count);
$width = intval((88 - $mass[2])/2);
imagettftext($img, 12, 0, $width, 27, $grey, $fontfile, $id_count);
imagepng($img);
imagedestroy($img);
?>
При использовании русских букв могут возникнуть проблемы, по этой причине мы преобразуем текст из кодировки windows-1251 в UTF-8 при помощи функции iconv(). Попробуйте обновить страницу, цифры на счетчике будут увеличиваться.
При выводе текста на готовое изображение возможны проблемы с цветом текста. Особенно это проявляется при использовании изображений в формате GIF, так как количество цветов ограничено числом 256. Если попытаться добавить новый цвет при максимальном количестве цветов в палитре, функция imagecolorallocate() вместо идентификатора цвета вернет значение false, а цвет текста будет соответствовать цвету фона. Один из способов решения этой проблемы заключается в использовании функции imagecolorclosest(), которая возвращает ближайший цвет, имеющийся в палитре (листинг 67).
Листинг 67. Вывод текста на готовое изображение
<?php
$img = imagecreatefromgif('foto.gif');
header('Content-type: image/gif');
$white = imagecolorallocate($img, 255, 255, 255);
if ($white !== false) {
$str = 'Точный цвет';
}
else {
$white2 = imagecolorclosest($img, 255, 255, 255);
$str = 'Ближайший цвет';
}
$fontfile = 'C:/WINDOWS/Fonts/arial.ttf';
$str = iconv("windows-1251", "UTF-8", $str);
imagettftext($img, 28, 0, 100, 400, $white2, $fontfile, $str);
$str = 'Точный цвет';
$str = iconv("windows-1251", "UTF-8", $str);
imagettftext($img, 28, 0, 140, 440, $white, $fontfile, $str);
imagegif($img);
imagedestroy($img);
?>
Итак, мы выводим на изображение две строки. Первая строка выводится цветом, ближайшим к указанному цвету в палитре. Вторая строка демонстрирует цвет текста, если бы мы не использовали функцию imagecolorclosest(). Результат выполнения листинга изображен на рис. 2.
Рис. 2. Вывод текста на готовое изображение
Отправитель | Нити |
---|
2 пользователь(ей) активно (2 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 2 далее... |