Наложение на картинку текста с подчеркиванием в PHP GD

Наложение на картинку текста с подчеркиванием в PHP GDВ этой статейке, я хочу показать как можно средствами GD наложить на картинку текст с подчеркиванием.
К сожалению, в GD нет стандартных средств для применения стилей к тексту — нельзя задать тексту ни подчеркивание, ни жирность, ни курсив.

Можно конечно, для таких случаев перерисовать шрифты :) Но такой вариант слишком трудоемкий и долгий. Я решил не трогать шрифты, а нарисовать подчеркивание сам.
Идей простая — пишем текст, нужным шрифтом, а после этого просто рисуем линии под каждой строчкой. Алгоритм прост: разбиваем весь текст на строки, измеряем длину каждой строки, получаем координаты строки и рисуем линию.
А вот готовый алгоритм:

$text = $_POST['text']; // любой текст
$fontSise = 48; // размер текста
$fontName = "arial.ttf"; // путь к шрифту
$padLeft = 100; // отступ текста слева
$padTop = 100; // отступ текста сверху
$textColor = 0x008000; // цвет текста
$pathForImg = '/tmp/'; //путь для сохранения картинки
$im = imageCreateFromJpeg($img); // картинка

// наносим текст
imagettftext($im, $fontSise, 0, $padLeft, $padTop, $textColor, $fontName, $text);

// делим текст на строки (по переходу на новую строку)
$str = str_replace(array("\r\n", "\r", "\n"), '=SEPARATION=', strip_tags($text));
$arrayLines = explode("=SEPARATION=", $str);
// Получение размеры строки 
$arrayWidthLines = array();
$arrayHeightLines = array();
foreach($arrayLines as $i => $oneLine){
        $textbox = imagettfbbox($fontSise, 0, $fontName, $oneLine);
        $arrayWidthLines[$i] = $textbox[2] - $textbox[0];
        $arrayHeightLines[$i] = $textbox[1] - $textbox[7];
}
// рисование линий
$paddingLine = 5; // отступ линии от начала текста
foreach($arrayWidthLines as $i => $oneWidth){
        imagesetthickness($im, 3); // толщина линии
        // рисуем линию
        imageline ($im, $padLeft , $padTop + ($fontSise*2)*$i+$paddingLine, $padLeft +$oneWidth, $padTop + ($fontSise*2)*$i+$paddingLine, $textColor);
}
// сохраняем картинку
imagejpeg($im, $pathForImg);	
// В конце освобождаем память
imageDestroy($im);
Рассказать друзьям:


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

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

*