我编写了这段代码,用于递归压缩图像,直到它落入我想要的大小范围内。由于某种原因它不起作用。救命!!!
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;
}
我发现的是,它进入了无限循环,因为我无法在第一次压缩后获取文件大小。下面是输出快照商店的链接。我必须添加一个计数器来控制无限循环。
最佳答案
all i have discovered is that in gets into an indefinite loop because i cant get the filesizes after the first compression.
文件大小的结果被缓存。 (或者说,底层文件系统调用的结果可能会更准确;这不仅影响文件大小,还影响获取有关文件/文件夹信息的其他几个函数。)
所以你应该打电话clearstatcache
在每次迭代中,这样当您之后检查文件大小时,您就可以获得实际的当前值。
关于php - 使用 gd 库中的 imagejpeg、imagetruecolor 进行递归压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46768225/