私はこのコードを書いて、私が欲しいサイズの範囲に収まるまで再帰的に画像を圧縮しました。なんらかの理由で、それはうまくいかない。助けて!!!imagejpegによる再帰圧縮、gdライブラリからのimagetruecolor
public function compress4($src,$dest,$file_size, $count = 1){
$info = getimagesize($src);
if($info['mime'] == "image/jpeg"){
$image = imagecreatefromjpeg($src);
}
else if($info['mime'] == "image/png"){
$image = imagecreatefrompng($src);
}
else if($info['mime'] == "image/gif"){
$image = imagecreatefromgif($src);
}
if($file_size > 1000){
$quality = 50;
}
else {
echo "file size acceptable <br>";
return $src;
}
echo "file has been compressed at $quality" . "%<br>";
imagejpeg($image,$dest,$quality);
imagedestroy($image);
echo $dest . "<br>";
$file_size = round(filesize($dest)/1024);
echo "filesize: $file_size and count: $count<br>";
if ($file_size > 1000 && $count <= 5){
echo "file size too large<br>";
echo "file too big for thumbnail: $file_size" . "kb<br>Starting compression number $count<br><br>";
$this->compress4($src,$src,$file_size, ++$count);
}
return $dest;
}
私が発見したのは、最初の圧縮後にファイルサイズを取得できないため、不定期なループが発生することです。以下は出力のスナップショットへのリンクです。私は、不定ループを制御するためだけにカウンタを追加する必要がありました。
link to image showing output after executing code
'filesize'の結果がキャッシュされるので、各繰り返しで[' clearstatcache'](http://php.net/manual/en/function.clearstatcache.php)を呼び出す必要があります。 – CBroe
ありがとうございます。魅力のように働いた。 – user3667989