При нанесении текста на изображение не редко случается
необходимость, вывода подчеркнутого текста. К сожалению, для этих целей стандартных функций нет. Но, реализовать
подчеркивание можно. Для этого необходимо вывести текст и
нарисовать под ним линию. Загвоздка заключается в том, что
необходимо знать координаты нанесения линии, а также ее длину.
Для определения начала линии можно воспользоваться
координатами самого текста, только прибавить к значению по оси 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);