我有一行文字需要包装并居中在GD图像中。我也使用ttf字体。请问有什么能给我一些帮助吗?
我设法得到一些文字来做以下内容,但现在我需要把它放到中心位置:
function wrap($fontSize, $angle, $fontFace, $string, $width){
$ret = "";
$arr = explode(' ', $string);
foreach ( $arr as $word ){
$teststring = $ret.' '.$word;
$testbox = imagettfbbox($fontSize, $angle, $fontFace, $teststring);
if ( $testbox[2] > $width ){
$ret.=($ret==""?"":"\n").$word;
} else {
$ret.=($ret==""?"":' ').$word;
}
}
return $ret;
}
答案 0 :(得分:2)
用户valentijn de Pagter在php net manual上提供了一个很好的函数来计算框(我看到你确实使用的是imagettfbbox()),并从它返回的数组中计算如何居中文本。你可以在这里找到它:
答案 1 :(得分:1)
水平和垂直居中:从整个文本的imagettfbbox获取半高(使用新行)并从图像的一半高度($start_x
)中减去它。
现在按新行分割文字,为每一行创建ttfbox并获得它的高度($h
)和半宽度($w
)。从半图像宽度+ $w
和$start_x
开始绘制线条,将$h
添加到$start_x
,重新创建直到写完所有线条。
答案 2 :(得分:0)
这就是我所做的。使用imagettftext函数,您可以添加新的线标记并继续到下一行。您可以在一定数量的字符后添加\ n到字符串。这个例子只会在空格上打破,所以单词不会被切断。
$description=$property['description'];
$len=strlen($description);
$str="";
$c=0;
for($i=0;$i<$len;$i++){
$chr=substr($description,$i,1);
$str.=$chr;
if($c>40 && $chr==" ") {
$str.="\n";
$c=0;
}
$c++;
}
$result=$str;
imagettftext($img, 15, 0, $x - 60, $descmgn, $textcolor, $font, $result);