在gd和php中包装和居中文本

时间:2011-02-17 20:54:44

标签: php text image-processing formatting gd

我有一行文字需要包装并居中在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;
}

3 个答案:

答案 0 :(得分:2)

用户valentijn de Pagter在php net manual上提供了一个很好的函数来计算框(我看到你确实使用的是imagettfbbox()),并从它返回的数组中计算如何居中文本。你可以在这里找到它:

center text with 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);