PHP - 将图像压缩到预定义的大小


PHP - Compress image to pre-defined size

我正在开发允许用户上传图像的应用程序。我们将最大文件大小设置为 1MB。我知道有一些压缩JPEG的选项(我们在这里处理jpeg(。

从我所看到的,所有这些函数都只允许您定义压缩率并将其缩小。我想知道是否有一个函数允许您定义最大文件大小并让它计算满足该大小所需的压缩率。

如果没有,我认为我最好的方法是使用一个查看大小的 while 循环,然后继续以 10% 的增量使用 imagejpeg(( 点击图像,直到文件低于预定义的最大大小。

我在这里走在正确的轨道上吗?

这取决于数据,但对于图像,您可以拍摄小样本。缩减采样会改变结果。下面是一个例子:PHP - 压缩图像以满足文件大小限制。

我使用以下代码完成了此任务:

$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 函数。