2012-02-26 2 views
1

このコードで達成しようとしているのは、まず画像の後にディレクトリをスキャンし、170x170より大きい場合は1つの画像を取り込んでサムネイルを作成します。私が抱えている問題は、新しいファイルを読み込もうとしたときに、期待通りに動作しない場合です。ディレクトリをスキャンして既に存在する画像からサムネイルを作成する

<?php 
foreach (glob('img/*.png') as $f) { 
    $list[filemtime($f) . '-' . $f] = $f; 
} 

$keys = array_keys($list);  
sort($keys); 

$picOne = $list[array_pop($keys)]; 
$picTwo = $list[array_pop($keys)]; 
$picThree = $list[array_pop($keys)]; 
$picFour = $list[array_pop($keys)]; 

list($width, $height) = getimagesize($picOne); 
if ($width > 170 && $height > 170) { 
    $thumb = imagecreatetruecolor(170, 170); 
    $source = imagecreatefrompng($picOne); 
    imagecopyresized($thumb, $source, 0, 0, 0, 0, 170, 170, $width, $height); 
    $path = $picOne."_170x170.png"; 
    imagepng($thumb, $path); 
} 

echo '<a href="'.$picOne.'" /><img width=170 height=170 src="'.$picOne.'" /></a>&nbsp;&nbsp;'; 
echo '<a href="'.$picTwo.'" /><img width=170 height=170 src="'.$picTwo.'" /></a>&nbsp;&nbsp;'; 
echo '<a href="'.$picThree.'" /><img width=170 height=170 src="'.$picThree.'" /></a>&nbsp;&nbsp;'; 
echo '<a href="'.$picFour.'" /><img width=170 height=170 src="'.$picFour.'" /></a>'; 

?> 

このコードは新しいファイルを作成する必要がありますか?一部は罰金確かに動作しますが、$ picOneが追加_170x170.pngますと、私はその理由を理解していないこと

$path = $picOne."_170x170.png"; 
imagepng($thumb, $path) 

。私がやったことは、$ picOneの名前+ _170x170.pngで新しいファイルを作成することですが、代わりに$ picOneもそれを取得します。

誰でもこのコードを修正したり、動作させるために必要なことを説明したりできますか?

私が基本的にやろうとしていることは次のとおりです。 1.ディレクトリをスキャンします。 2.画像を取り込んでサムネイルを作成します。 3.サムネイルを出力します。

答えて

1

問題が発生している理由は、新しいファイルを作成するのではなく、既存のファイルを上書きするためです。新しいファイルにあなたがこのループを使用してみてくださいするたびに作成するには:

$path = $picOne."_170x170.png"; 

    $x = 0 ; 
    while (file_exists($path)) 
    { 
     $path = $picOne ."-" . $x . ."_170x170.png"; 
     $x++; 
    } 

をこれは、常にあなたのすべての時間を新しいファイル名を与えるだろう、あなたは簡単な関数にそれを置くことができます。

+0

既存のファイルを上書きしていません。 name.png_170x170.pngという名前の新しいファイルを作成し、$ picOneに追加します。私は$ picOneを_170x170.pngとして、name.pngとしてのみ望みません。 – user1234259

+0

古いファイルのリンクを解除し、新しいファイルの名前を変更するだけです.... – Baba

関連する問題