ImageMagick,创建新的图像文件名

时间:2012-01-09 15:13:16

标签: php html imagemagick

请在下面找到代码,在默认目录中创建一个文件名为“masked.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”目录作为默认目录。每次创建新图像。我需要为最后生成的每个图像创建一个新的文件名。 “masked.gif”不应该被之后创建的新图像替换。

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

有关如何解决这个问题的想法吗?

1 个答案:

答案 0 :(得分:0)

您可以将此函数用于文件名和目录问题:

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

在这里,您将获得一个唯一的文件名,并按创建顺序排列。