Рецепт №100. Из книги «128 рецептов php»
Перейти к оглавлению
При нанесении текста на изображение не редко случается необходимость, вывода подчеркнутого текста. К сожалению, для этих целей стандартных функций нет. Но, реализовать подчеркивание можно. Для этого необходимо вывести текст и нарисовать под ним линию. Загвоздка заключается в том, что необходимо знать координаты нанесения линии, а также ее длину. Для определения начала линии можно воспользоваться координатами самого текста, только прибавить к значению по оси Y размер самого текста. А для получения длины, можно воспользоваться функцией imagettfbbox, которая определяет положение текста. Функция возвращает массив с восемью элементами, координаты углов, обрамляющей текст рамки. Используя полученные, координаты, можно легко высчитать длину текста.
Пример:
$width = 200; // ширина изображения
$height = 100; // высота изображения
// создаем изображение, на котором будем рисовать
$img = imagecreatetruecolor($width, $height);
// цвет заливки фона
$rgb = 0xFFFFFF;
// заливаем холст цветом $rgb
imagefill($img, 0, 0, $rgb);
// путь к шрифту
$fontName = "impact.ttf";
// размер шрифта
$fontSise = 18;
$x = 50; // отступ слева
$y = 50; // отступ справа
// текст, который будем наносить на картинку
$text = "Любой текст";
// цвет шрифта
$textColor = 0x000000;
// отступ линии от начала текста
$paddingLine = 3;
// выводим текст
imagettftext(
$img, $fontSise, 0, $x, $y,
$textColor, $fontName, $text
);
// определяем размер текста
$textbox = imagettfbbox(
$fontSise, 0, $fontName, $text
);
// вычисляем ширину текста
$text_width = $textbox[2] - $textbox[0];
// толщина линии
imagesetthickness($img, 3);
// рисуем линию
imageline (
$img, $x, $y + $paddingLine, $x + $text_width,
$y + $paddingLine, $textColor
);
// заголовок для браузера
header("Content-Type: image/png");
// выводим результат в браузер
imagepng($img);
// очищаем память после выполнения скрипта
imagedestroy($img);
