2
我有這段代碼我寫遞歸壓縮圖像,直到它落在我想要的大小範圍內。由於某種原因,它不會工作。幫幫我!!!遞歸壓縮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;
}
所有我發現的是,進入一個無限循環,因爲我無法獲得第一次壓縮後的文件大小。下面是一個輸出的snapshop的鏈接。我不得不添加一個計數器來控制無限循環。
link to image showing output after executing code
'filesize'的結果被緩存,所以你應該在每次迭代中調用['clearstatcache'](http://php.net/manual/en/function.clearstatcache.php)。 – CBroe
謝謝。像魅力一樣工作。 – user3667989