Нанесение на изображение текста с подчеркиванием

Рецепт №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);
Рассказать друзьям:


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*