2012-03-18 2 views
0

Я пытаюсь создать изображения с помощью 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. формируемого изображение должно быть сохранен в другой папке не в корневом каталоге, скажу Нам каталога e как «coolpics»,

Пожалуйста, помогите мне исправить это. Ваш ответ приветствуется.

+0

Есть много, что вы можете сделать для уникального имени, как md5 ($ some_data), или вы можете использовать микропоры, а также. Что касается сохранения в другой папке, попытался ли вы указать путь, который вы хотите в 'exec', это сработало? – Melsi

ответ

1
  1. Для уникального имени файла проверьте функцию uniqid.
  2. Для сохранения каталога, просто сцепить его с именем файла, что-то вроде:
 
// your command here 

$directory = "/data/images/coolpics/" 
$name = uniqid(); 
exec(escapeshellcmd("convert $cmd $directory$name 2>&1"), $array); 

Обратите внимание, что вы передаете значения POST непосредственно к системной команды, это может быть очень серьезной безопасности не в состоянии , Используйте escapeshellcmd, чтобы убедиться, что ваша система в безопасности.

0

Простым решением для получения уникального имени файла является использование метки времени (например, microtime() (doc reference)). Чтобы сохранить изображение в другой папке, просто добавьте путь к параметрам exec.

Вся команда ехес будет выглядеть следующим образом:

exec("convert $cmd /your/path/".str_replace(".","-",microtime(true)).".gif 2>&1", $array); 
Смежные вопросы