繁体   English   中英

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

[英]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的中心文本

要水平和垂直居中:从整个文本的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM