Php 自动换行代码在任意点剪切文本

Php 自动换行代码在任意点剪切文本,php,gd,word-wrap,Php,Gd,Word Wrap,我使用PHP和GD库生成一个代码,该代码接收一个字符串作为输入,并将其拆分成若干行,以便可以放入图像中。问题是,根据我键入的文本,它会在一个随机点停止。例如,使用以下文本作为输入: 知识是一种美德,是一种美德,是一种美德,是一种美德。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡 输出图像如下所示: 我的代码是: <?php function createStory($content){

我使用PHP和GD库生成一个代码,该代码接收一个字符串作为输入,并将其拆分成若干行,以便可以放入图像中。问题是,根据我键入的文本,它会在一个随机点停止。例如,使用以下文本作为输入:

知识是一种美德,是一种美德,是一种美德,是一种美德。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡

输出图像如下所示:

我的代码是:

<?php
function createStory($content){
    $text = $content;
    $jpg_image = imagecreatefromjpeg('imagebuilder/footage/story1.jpg');
    $white = imagecolorallocate($jpg_image, 255, 255, 255);
    $font_path = 'Arial.ttf';
    $words = explode(" ",$text);
    $proccessedtext = "";
    $line = "";
    $line .= $words[0] . " ";
    for($i = 1; $i < count($words); $i++){
        $bbox = imagettfbbox(25, 0, $font_path, $line);
        $width = $bbox[4]-$bbox[0];
        if($width<700){
            $line .= $words[$i] . " ";
        }else{
            $proccessedtext .= $line . " \n".$words[$i]. " ";
            $line = "";
        }
    }
    imagettftext($jpg_image, 25, 0, 75, 600, $white, $font_path, $proccessedtext);
    imagejpeg($jpg_image, "imagebuilder/created/readyStory.jpg");
    imagedestroy($jpg_image);
    return("/imagebuilder/created/readyStory.jpg");
}
?>


我的代码中有错误吗?还是库中有bug?

很简单:请注意,
$processedText
在超出最大宽度之前不会接收
$line
的内容!因此,在任何给定的时间,它只会收到一整行加上溢出的一个单词。因此,如果剩下的文本没有超出当前行一个额外的单词,那么还有剩余的文本需要处理。尝试添加
$processedText.=$line直接位于for循环之后:

<?php
function createStory($content){
    $text = $content;
    $jpg_image = imagecreatefromjpeg('imagebuilder/footage/story1.jpg');
    $white = imagecolorallocate($jpg_image, 255, 255, 255);
    $font_path = 'Arial.ttf';
    $words = explode(" ",$text);
    $proccessedtext = "";
    $line = "";
    $line .= $words[0] . " ";
    for($i = 1; $i < count($words); $i++){
        $bbox = imagettfbbox(25, 0, $font_path, $line);
        $width = $bbox[4]-$bbox[0];
        if($width<700){
            $line .= $words[$i] . " ";
        }else{
            $proccessedtext .= $line . " \n".$words[$i]. " ";
            $line = "";
        }
    }
    $processedText .= $line;
    imagettftext($jpg_image, 25, 0, 75, 600, $white, $font_path, $proccessedtext);
    imagejpeg($jpg_image, "imagebuilder/created/readyStory.jpg");
    imagedestroy($jpg_image);
    return("/imagebuilder/created/readyStory.jpg");
}
?>