2011-02-17 45 views
3

我有一行文本,我需要包装和中心在GD图像。我也使用ttf字体。请问能给我一些帮助吗?包装和中心文本在GD和PHP

我设法得到一些文本换做以下,但现在我需要得到它的中心:

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; 
} 

回答

1

要在水平和垂直居中:从整个文本的imagettfbbox半高(新线),并从图像($start_x)的一半高度。减去它。

现在用新行分割文本,为每行创建ttfbox并获取它的高度($h)和半宽($w)。从一半图像宽度+ $w$start_x开始绘制线,将$h添加到$start_x,直到所有行都被写入。

2

用户valentijn德Pagter提供,在PHP净手册,一个漂亮的函数来计算该框(我看你实际上使用imagettfbbox()),并从数组返回时计算如何居中文本。你可以在这里找到它:

center text with imagettfbbox

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);