[英]wrap and center text in gd and php
我有一行文字,我需要在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;
}
用户valentijn de Pagter在php网络手册上提供了一个很好的函数来计算框(我看到你确实使用了imagettfbbox()),并从它返回的数组计算出如何居中文本。 你可以在这里找到它:
要水平和垂直居中:从整个文本的imagettfbbox获取半高(使用新行)并从图像的半高( $start_x
)中减去它。
现在用新行分割文本,为每一行创建ttfbox并获得它的高度( $h
)和半宽度( $w
)。 从半图像宽度+ $w
和$start_x
开始绘制线条,将$h
添加到$start_x
,重新创建直到所有线条都被写入。
这就是我做的。 使用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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.