2012-01-09 4 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」ディレクトリが必要です。毎回新しいイメージを作成します。最後に生成されたすべてのイメージに対して新しいファイル名を作成する必要があります。 "masked.gif"はそれ以降に作成された新しいイメージに置き換えてはなりません。

"images2.gif"の後に "image1.gif"のような画像ファイル名が好きです。

これを修正する方法はありますか?

+0

あなたはexec()の方がいいですか?なぜPHP ImageMagick関数を使用しないのですか? –

答えて

0

は、filenameにはディレクトリの問題この機能を使用することができます。

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

この質問は回答しました。 –

関連する問題