Подчеркнутый текст в PHP GD2

Подчеркнутый текст в PHP GD2

Стандартной функции подчеркивания текста в GD2 нет, поэтому надо вычислять ширину написанного текста с помощью функции imagettfbbox() и рисовать линию ниже текста с помощью функции imageline().

Ниже рабочий пример с комментариями:

$w = 400;
$h = 100;
$image = imagecreatetruecolor( $w, $h ) or die('Cannot create image');

//Цвета
$white = 0xffffff;
$black = 0x000000;
$red = 0xff0000; 

//Cам текст
$text = iconv( 'cp1251', 'utf-8', 'MyWebCenter' );

//Шрифт
$font = realpath('fonts/arial.ttf'); // - обязательно надо указать путь до шрифта
$fontsize = 30; // размер шрифта, gd1 - в пикселях, gd2 - в пунктах

///Централизация шрифта
$sz = imagettfbbox( $fontsize, 0 , $font , $text );
$x = ( imageSX($image) - ( $sz[2] - $sz[0] ) ) / 2 ;
$y = ( imageSY($image) + ( $sz[1] - $sz[7] ) ) / 2 ;

//Делаем изображение прозрачным
imagesavealpha($image,true);
imagefill($image, 1, 1, imagecolorallocatealpha( $image, 255, 255, 255, 127 ) );
imagecolortransparent($image, $black);

//Вычисляем ширину текста
for($i = 0; $i < strlen($text); $i++ ) {
    $dimensions = imagettfbbox( $fontsize, 0, $font, substr( $text, $i, 1 ) );
    $total_width += ( $dimensions[2] );
} 

$dimensions = imagettfbbox($fontsize, 0, $font, $text);
$difference = $dimensions[2] - $total_width;

imagettftext($image, $fontsize, 0, $x+1, $y+1, $black, $font, $text);
imagettftext($image, $fontsize, 0, $x, $y, $black, $font, $text);

$x2 = $x + $total_width + $difference + 2; 

//устанавливаем толщину линии и рисуем её
imagesetthickness(  $image, 3 );
imageline ( $image, $x, $y+4, $x2, $y+4, $red ); 

//Вставляем текст
imagettftext( $image, $fontsize, 0, $x, $y, $red, $font, $text );

//Выводим изображение
header('Content-type: image/png');

imagepng($image);
imagedestroy($image);

 

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

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