Рецепт №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);