请在下面找到代码,在默认目录中创建一个文件名为“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”。
有关如何解决这个问题的想法吗?
答案 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";
}
在这里,您将获得一个唯一的文件名,并按创建顺序排列。