2012-01-09 2 views
0

기본 디렉토리에 "masked.gif"라는 파일 이름으로 이미지를 만드는 아래 코드를 찾으십시오.ImageMagick, 새 이미지 파일 이름 만들기

$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"와 같은 순차 이미지 파일 이름을 선호합니다.

이 문제를 해결하는 방법에 대한 아이디어가 있으십니까?

+0

정말 exec()를 사용 하시겠습니까? PHP ImageMagick 함수를 사용하지 않는 이유는 무엇입니까? –

답변

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"; 
} 

고유 한 파일 이름을 얻고 그들이 창조에 의해 정렬됩니다.

+0

이 질문에 대한 답변이 .. .. close this this close this this –

관련 문제