А мона не мучить мозг и замутить следующее ->
<?php
$fontsDir="/ttf"; // каталог с TTF-шрифтами $cacheDir="/tmp"; // каталог с кешем // пути от Virtual Root
// описания стилей, в которых генерируются надписи $label[0]=array( "FontFile"=>"ds_corona.ttf", "FontSize"=>40, "FontAngle"=>0, "Padding"=>2, "AntiAliasing"=>1, "Transparency"=>1, "BackColor"=>"FFFFFF", "TextColor"=>"606060"); // ограничимся только одним стимем
// это вспомогательные функции function red($s) function green($s) function blue($s) function color($img,$s) { $c=ImageColorExact($img,red($s),green($s),blue($s)); if($c<0) $c=ImageColorAllocate($img,red($s),green($s),blue($s)); return $c; }
function label($LabelText,$LabelStyle=0) { global $label,$fontsDir,$cacheDir; $documentRoot=$GLOBALS["HTTP_SERVER_VARS"]["DOCUMENT_ROOT"]; // где у нас живёт кешированное изображение? $cacheFile=$cacheDir."/". base_convert(crc32($LabelStyle.$LabelText),10,16).".png"; if(!file_exists($documentRoot.$cacheFile)) { // если картинки нету, тогда мы её нарисуем $L=$label[$LabelStyle]; $FontFile=$documentRoot.$fontsDir."/".$L["FontFile"]; $tmp=ImageTTFBBox($L["FontSize"],$L["FontAngle"], $FontFile,$LabelText); $x=array($tmp[0],$tmp[2],$tmp[4],$tmp[6]); $y=array($tmp[1],$tmp[3],$tmp[5],$tmp[7]); // опциональные параметры в описании стиля $Width=isset($L["Width"])?$L["Width"]:max($x)-min($x); $Height=isset($L["Height"])?$L["Height"]:max($y)-min($y); $im=@ImageCreate($Width+$L["Padding"]*2,$Height+$L["Padding"]*2); $im_bgcolor=color($im,$L["BackColor"]); $im_txcolor=color($im,$L["TextColor"]); if($L["Transparency"]) ImageColorTransparent($im,$im_bgcolor); ImageTTFText($im,$L["FontSize"],$L["FontAngle"], $L["Padding"]-min($x),$L["Padding"]-min($y), $L["AntiAliasing"]?$im_txcolor:-$im_txcolor, $FontFile,$LabelText); ImagePNG($im,$documentRoot.$cacheFile); } $tmp=GetImageSize($documentRoot.$cacheFile); // и выдаём наружу результат return "<img src=\"$cacheFile\" alt=\"$LabelText\" border=0>"; }
?>
|