Работа с текстом в PHP
Рисование линий, прямоугольников и других фигур является важной частью при работе с изображениями. Однако зачастую все это было бы не столь информативно, если бы не возможность писать текст на них. Для этого в библиотеке GD имеется множество функций, одна из которых imagestring() — листинг 13.8.
Листинг 13.8. Вывод строки на изображение
<?php
header("Content-type: image/png");
$image = imagecreatetruecolor (100, 100);
$white = imagecolorallocate($image, 255, 255, 255);
// создание строки
imagestring($image, 3, 5, 49, "Hello, World!", $white);
// вывод изображения
imagepng($image);
// уничтожение изображения из памяти
imagedestroy($image);
?>
В результате выполнения этой программы выводится текст «Hello, World!» на черном фоне квадрата. Рисунок ниже.
В качестве входных параметров этой функции выступают соответственно идентификатор изображения, номер встроенного шрифта (от 1 до 5), координаты первой буквы, строка для вывода и, наконец, цвет текста.
Помимо разобранной функции в библиотеке GD имеется еще несколько альтернативных способов вывести строку. Например, функция imagettftext(), которая позволяет использовать шрифты TrueType (листинг 13.9).
Листинг 13.9. Вывод строки на изображении с помощью функции imagettftext()
<?php
header("Content-type: image/png");
$image = imagecreatetruecolor (100, 100);
$white = imagecolorallocate($image, 255, 255, 255);
// создание строки
imagettftext($image, 9, 0, 5, 49, $white, "Snap.ttf", "Hello, World!");
// вывод изображения
imagepng($image);
// удаление изображения из памяти
imagedestroy($image);
?>
В этом примере мы использовали файл Snap.ttf, который содержит шрифт Snap ITC. Входные параметры этой функции следующие: идентификатор изображения, размер шрифта, угол поворота строки против часовой стрелки, координаты начала строки, ее цвет, путь к файлу со шрифтом (здесь он находится в одной папке с вызываемым файлом РНР) и строка для вывода.
Иногда бывает очень полезным знать длину и высоту выводимой строки, так как зачастую она постоянно пытается выйти за пределы изображения. Для решения этой проблемы применяют функции imagefontheight(), imagefontwidth() и imagettfbbox().
Принцип работа первой и второй функции очень прост. Мы задаем номер внутреннего шрифта в качестве входного параметра, а нам возвращается соответственно высота и длина символа (листинг 13.10).
Листинг 13.10. Использование длины и высоты строки
<?php
header("Content-type: image/png");
$image = imagecreatetruecolor (200, 200);
$white = imagecolorallocate($image, 255, 255, 255);
// строка для вывода
$str = "Hello, World!";
// расчет координат начала строки
$х = (200 - strlen($str) * imagefontwidtli(4)) /2;
$у = (200 - imagefontheight(4)) / 2;
// создание строки
imagestring($image, 4, $х, $у, $str, $white);
// вывод изображения
imagepng($image);
// удаление изображения из памяти
imagedestroy($image);
?>
В этом примере мы добиваемся вывода строки приблизительно посередине квадрата. Заметьте, что для вычисления длины строки мы умножили длину символа на количество букв в строке.
Однако дело осложняется, если текст находится под определенным углом. Для этого применяют функцию imagettfbbox() - листинг 13.11.
Листинг 13.11. Использование функции imagettfbbox()
<?php
header("Content-type: image/png");
$image = imagecreatetruecolor (100, 100);
$white = imagecolorallocate($image, 255, 255, 255);
// записываем массив координат
$mas_loc = imagettfbbox(15, 23, "Snap.ttf", "Hello, World!");
// расчет координат начала строки
$х = 100 - ($mas_loc[0] + $mas_loc[2] + $mas_loc[4] + $mas_loc[6]) / 4;
$y = 100 - ($mas_loc[1] + $mas_loc[3] + $mas_loc[5] + $mas_loc[7]) / 4;
// создание строки
imagettftext($image,15, 23, $x, $y, $white, "Snap.ttf", "Hello, World!");
// вывод изображения
imagepng($image);
// уничтожение изображения из памяти
imagedestroy($image);
?>
Входными параметрами функции imagettfbbox() являются соответственно размер шрифта, угол поворота строки, путь к файлу со шрифтом и строка для вывода. Функция возвращает массив с координатами углов прямоугольника, описывающего строку в порядке, представленном в таблице 13.1.
Таблица 13.1. Порядок описания строки.
Ключ | Значение Координаты |
---|---|
0 | Левый нижний угол (ось ОХ) |
1 | Левый нижний угол (ось ОY) |
2 | Правый нижний угол (ось ОХ) |
3 | Правый нижний угол (ось ОY) |
4 | Правый верхний угол (ось OX) |
5 | Правый верхний угол (ось OY) |
6 | Левый верхний угол (ось ОХ) |
7 | Левый верхний угол (ось OY) |