我正致力于一个允许用户上传图片的应用程序。我们将最大文件大小设置为1MB。我知道有一些选项用于压缩JPEG(我们在这里处理jpegs)。
从我看到的情况来看,所有这些功能只允许您定义压缩比并将其缩小。我想知道是否有一个功能允许您定义最大文件大小并让它计算满足该大小所需的压缩比。
如果没有,我认为我最好的方法是使用一个查看大小的while循环,并以10%的增量继续用imagejpeg()命中图像,直到文件低于预定义的max-size。
我在这里走在正确的轨道上吗?
答案 0 :(得分:0)
这取决于数据,但是对于图像,您可以采用小样本。下采样会改变结果。以下是一个示例:PHP - Compress Image to Meet File Size Limit。
答案 1 :(得分:0)
我使用以下代码完成了此任务:
$quality = 90;
while(filesize($full_path) > 1048576 && $quality > 20) {
$img = imagecreatefromjpeg($full_path);
imagejpeg($img,$full_path,$quality);
$quality = $quality - 10;
clearstatcache();
}
if(filesize($full_path) > 1048576) {echo "<p>File too large</p>"; unlink($full_path); exit;}
声明的$quality > 20
部分是为了防止脚本质量降低到我认为不合理的程度。我相信在这里还有更多工作要做。我也可以添加分辨率重新调整大小的部分,但这适用于我当前的需求。这是最大文件大小为1MB。如果文件在最高质量等级后仍然太大,则会返回文件太大的错误并从服务器中删除该图像。
请注意clearstatcache()
在这里非常重要。如果没有这个,服务器会缓存图像大小,并且不会注意到文件大小的变化。
此脚本仅适用于JPEG,但还有其他用于gif,png等的php函数。