Две функции ниже работают вместе, чтобы создать красивые динамические c метки прозрачного фона для одного из моих сайтов, но теперь я хотел бы использовать то, что он уже делает, чтобы он мог создавать вкладки меню сайта, которые в настоящее время физические картинки. Я немного изменил функцию textimage (), добавив логическое значение $ AsTab, чтобы оно также могло создавать вкладки, не удаляя его текущее назначение, и оно действительно делает одно, но, конечно, на прозрачном фоне.
Что я ищу, так это темно-красный язычок с квадратными верхними углами и закругленными нижними углами с точеным взглядом по краям. Внизу два примера изображения, одно из которых показывает, что я пытаюсь создать, а другое показывает, что этот код создает сейчас. Как мне достичь желаемого эффекта или чего-то похожего на него?
function textimage() {
global $FontPath;
global $Height;
global $String;
global $FontName;
global $FontSize;
global $Angle;
global $EnableShadow;
global $CenterAlign;
global $AsTab;
// Create additional values and calculations
$FontPath = $_SERVER['DOCUMENT_ROOT'] . "$FontPath";
$Font = $FontPath . $FontName;
$String = html_entity_decode($String);
$TextDimensions = imagettfbbox($FontSize,$Angle,$Font,$String);
$Width = ($AsTab !== TRUE) ? (abs($TextDimensions[4] - $TextDimensions[0]) + 5) : (abs($TextDimensions[4] - $TextDimensions[0]) + 20);
$Height = ($AsTab !== TRUE) ? (abs($TextDimensions[5] - $TextDimensions[1])) : $Height;
$y_offset = abs($TextDimensions[5]);
$Image = imagecreatetruecolor($Width,$Height);
imagesavealpha($Image, TRUE);
$TransColor = imagecolorallocatealpha($Image, 0, 0, 0, 127);
imagefill($Image, 0, 0, $TransColor);
$TextColor = imagecolorallocate($Image,0x00,0x00,0x55);
$ShadowColor = imagecolorallocate($Image,0x77,0x77,0x77);
$Lines = explode("\n",$String);
foreach ($Lines as $Line):
if ($EnableShadow === TRUE):
if ($CenterAlign === TRUE):
$x_offset = CenterText($FontSize,$Font,$Line,$Width);
else:
$x_offset = ($Width / 2) - ((min($TextDimensions[2],$TextDimensions[4]) - max($TextDimensions[0],$TextDimensions[6])) / 2);
endif;
imagettftextblur($Image,$FontSize,$Angle,$x_offset+5,$y_offset+5,$ShadowColor,$Font,$Line,10);
imagettftextblur($Image,$FontSize,$Angle,$x_offset,$y_offset,$TextColor,$Font,$Line);
else:
if ($CenterAlign === TRUE):
$x_offset = CenterText($FontSize,$Font,$Line,$Width);
else:
$x_offset = ($Width / 2) - ((min($TextDimensions[2],$TextDimensions[4]) - max($TextDimensions[0],$TextDimensions[6])) / 2);
endif;
imagettftext($Image,$FontSize,$Angle,$x_offset,$y_offset,$TextColor,$Font,$Line);
endif;
$y_offset += $FontSize * 1.5;
endforeach;
return imagepng($Image);
imagedestroy($Image);
}
function CenterText($FontSize,$Font,$String,$BoxWidth) {
$TextDimensions = imagettfbbox($FontSize,0,$Font,$String);
$xi = abs($TextDimensions[4]);
$x = intval(($BoxWidth - $xi) / 2);
return $x;
}
Он вызывается так, что для проверки целей в нем жестко закодирована текстовая строка:
<?php
// Specify path and font
$FontPath = "/internals/truetype/";
$FontName = "vineritc.ttf";
// Text font size, angle and style
$FontSize = 12;
$Angle = 0;
$Height = 32;
$EnableShadow = FALSE;
$CenterAlign = TRUE;
$AsTab = TRUE;
$String = "Search";
//$TextImage = textimage();
header("Pragma: no-cache");
header('Content-Type: image/png');
$TextImage = textimage();
echo $TextImage;
?>