ImageMagick,正在创建新的图像文件名


ImageMagick, creating new image file name

请找到下面的代码,该代码在默认目录中创建文件名为"maske.gif"的图像。

$size=$_POST["size"];
$label=$_POST["label"];
$font=$_POST["font"];
 $cmd = " -background transparent -font $font -pointsize $size label:$label -stroke          black -strokewidth 2 ".
"  '( -clone 0 -tile '"animated_water.gif[0]'" -stroke black -strokewidth 2 -gravity      center -annotate +0+0 $label ') ".
"  '( -clone 0 -tile '"animated_water.gif[1]'" -stroke black -strokewidth 2 -gravity    center -annotate +0+0 $label ') ".
"  -delete 0 -set delay 15 -loop 0 -trim +repage -layers Optimize ";
$array=array();
echo "<pre>";
exec("convert $cmd masked.gif 2>&1", $array);
echo "<br>".print_r($array)."<br>";
echo "</pre>";
echo "<img src='masked.gif'>";

我需要使用"images"目录作为默认目录。每次它都会产生新的图像。我需要为最后生成的每个图像创建一个新的文件名top。"masked.gif"不应被之后创建的新图像所取代。

我更喜欢顺序图像文件名,有点像"images2.gif"之后的"image1.gif"。

你知道怎么解决这个问题吗?

您可以使用此函数来处理文件名和目录问题:

function getNewFilename($dir = 'images/')
{
    $count = 0;
    if($handle = opendir($dir))
    {
        while (false !== ($file = readdir($handle)))
        {
            if ($file != "." && $file != "..")
            {
                $tmp = explode("_",$file); // get the number and extension
                $tmp2 = explode(".",$tmp[1]); //get only the number
                if($tmp2[0] > $count) $count = $tmp2[0]; //set the number to the count if it is higher thand the last recorded value
            }
        }
        closedir($handle);
    }
    return $dir."masked_".$count.".gif";    
}
exec("convert $cmd ".getNewFilename()." 2>&1", $array);

但如果你有大量的文件,这可能会非常慢。你应该使用这样的东西来代替:

function getNewFilename($dir = 'images/')
{
    return $dir."masked_".time().".gif";
}

在这里,您可以获得一个唯一的文件名,它们是按创建顺序排列的。