请找到下面的代码,该代码在默认目录中创建文件名为"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";
}
在这里,您可以获得一个唯一的文件名,它们是按创建顺序排列的。