PHP动态图像创建无法正常工作

时间:2015-05-18 16:59:23

标签: php regex gd

使用以下脚本,我将文本分成句子,并从每个句子动态创建图像。我的for循环没有正确执行。我不懂为什么?尽管文本包含4个不同的句子,但图像创建功能仅被调用一次,仅创建一个图像。该脚本的目的是创建四个图像并将其保存到硬盘驱动器中。我需要你的建议。

<?php
    $text = "Hello PHP! some sentences. very difficult, yes? that's for sure!?!";

    $chunks = preg_split('#[\r\n]#', $text, -1, PREG_SPLIT_NO_EMPTY);

    foreach($chunks as $val)
    {
        preg_match_all('#(?:\s[a-z]\.(?:[a-z]\.)?|.)+?[.?!]+#i', $val, $paragraph);
            foreach($paragraph[0] as $val)
            {
                $sentences[] = ltrim($val);
            }
    }

    $sentencesCount = count($sentences);

        for ($i=0; $i <$sentencesCount ; $i++) 
        { 
                //$value = $sentences[$i];
                //echo $value . "<br />";

            $image = imagecreatetruecolor(200, 50);
            imagefilledrectangle($image, 0, 0, 199, 49, 0xFFFFFF); //white


            $fontfile = 'verdana.ttf';

            imagefttext($image, 20, 0, 20, 35, 0x000000, $fontfile, $sentences[$i]);

            header('Content-type: image/png');
            imagepng($image);   
            //Save the image after the current timestamp.
            imagepng($image, "savedimages/" . time() . ".png");
            //Clean up.
            imagedestroy($image); 

    }

?>

1 个答案:

答案 0 :(得分:5)

所有图像都获得相同的文件名,因为代码运行得足够快,time()函数(以秒为单位返回时间)给你4次相同的值。所以你要在这一行覆盖同一个文件4次:

imagepng($image, "savedimages/" . time() . ".png");

作为解决方法,您可以使用rand()函数为唯一性附加随机数。

imagepng($image, "savedimages/" . time() . "-" . rand() . ".png");

更好的是,使用php的内置tempnam()函数生成唯一的文件名。