ImageMagick正在创建唯一的文件名


ImageMagick creating unique filename

我正在尝试使用ImageMagick生成图像,请检查以下代码:

<?
$label=$_POST["label"];
$image =$_POST["image"];
$cmd = " -background transparent label:'"$label'" -stroke red -strokewidth 0 ".
"  '( -clone 0 -tile '"" . $image . "[0]'" -stroke red -strokewidth 0 -gravity center  -annotate +0+0 '"$label'" ') ".
"  '( -clone 0 -tile '"" . $image . "[1]'" -stroke red -strokewidth 0 -gravity center -annotate +0+0 '"$label'" ') ".
"  '( -clone 0 -tile '"" . $image . "[2]'" -stroke red -strokewidth 0 -gravity center -annotate +0+0 '"$label'" ')  ".
"  '( -clone 0 -tile '"" . $image . "[3]'" -stroke red -strokewidth 0 -gravity center -annotate +0+0 '"$label'" ')  ".

 "  -delete 0 -set delay 20 -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'>";
?>

上面的代码通过生成一个名为masked.gif的图像可以很好地工作,但我现在需要做两件事:

  1. 生成的图像应该有一个唯一的文件名{每次都应该生成不同的文件名}
  2. 生成的图像应该保存在不同的文件夹中,而不是根目录中,比如说目录名为"coolpics"

请帮我解决这个问题。感谢您的回复。

  1. 要获得唯一的文件名,请检查uniqid函数
  2. 为了保存目录,只需将其与文件名连接起来,类似于:
//你的命令在这里$directory="/data/images/coolpics/"$name=uniqid();exec(escapeshellcmd("convert$cmd$directory$name 2>&1"),$array);

请注意,您将POST值直接传递给系统命令,这可能是非常严重的安全故障。使用escapeshellcmd来确保您的系统是安全的。

获取唯一文件名的一个简单解决方案是使用时间戳(例如microtime()(文档引用))。要将图像保存在另一个文件夹中,只需添加exec参数的路径即可。

整个exec命令如下所示:

exec("convert $cmd /your/path/".str_replace(".","-",microtime(true)).".gif 2>&1", $array);