ImageMagick创建唯一的文件名

时间:2012-03-18 23:59:45

标签: php html imagemagick

我正在尝试使用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”,
  3. 请帮我解决这个问题。感谢您的回复。

2 个答案:

答案 0 :(得分:1)

  1. 对于唯一文件名,请检查uniqid功能。
  2. 对于保存目录,只需将其与文件名连接,例如:
  3. // your command here
    
    $directory = "/data/images/coolpics/"
    $name = uniqid();
    exec(escapeshellcmd("convert $cmd $directory$name 2>&1"), $array);
    

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

答案 1 :(得分:0)

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

整个exec命令看起来像这样:

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