根据特定线宽(gd图像)分割单词的递归

时间:2013-05-24 08:30:42

标签: php recursion gd

我正在创建一个应用程序,允许用户使用GD图像在图像上书写。图像框具有一定的宽度。当用户写出比我的图像框宽度更长的单词时,我遇到了问题。我想用一个递归来分割这个词,我不是那个专业人士。这就是我所拥有的。

function cutLongWord($word, $fullwidth, $font, $fontsize){

    $arrWords = array();

    splitWord($arrWords, $word, $fullwidth, 0, $font, $fontsize);
}

function splitWord(&$arrWords, $word, $fullwidth, $startIndex, $font, $fontsize){
$output = "";
$numStringLength = strlen($word);

for($i = 1; ($i + $startIndex) <= $numStringLength; $i++){
    $substring = substr($word, $startIndex, $i);
    //dimension of substring
    $dimensions = imagettfbbox($fontsize, 0, $font, $substring);
    //line width of substring
    $subLineWidth = $dimensions[4] - $dimensions[0];


    if($subLineWidth <= $fullwidth){
        $output = $substring;
    }
    else {

        $arrWords[] = splitWord($arrWords, $word, $fullwidth, ($i - 1), $font, $fontsize);

    }
}

return $output;
}

这是一个无限循环。我有点卡住了。如果你能指出我正确的方向,我将非常感激。

感谢。

1 个答案:

答案 0 :(得分:0)

你可能不需要为此使用递归,因为它会使事情过于复杂。你可以做同样的事情:

while(strlen($word) < width)
{
    // Split a section of text of width "width"
    // and add it to array.
}