有没有办法将图像压缩到某个文件大小限制以下?

时间:2017-09-26 11:12:15

标签: php image image-resizing image-compression

要在PHP中压缩图像,这是其中一种方法:

<?php 
function compress($source, $destination, $quality) {

    $info = getimagesize($source);

    if ($info['mime'] == 'image/jpeg') 
        $image = imagecreatefromjpeg($source);

    elseif ($info['mime'] == 'image/gif') 
        $image = imagecreatefromgif($source);

    elseif ($info['mime'] == 'image/png') 
        $image = imagecreatefrompng($source);

    imagejpeg($image, $destination, $quality);

    return $destination;
}

$source_img = 'source.jpg';
$destination_img = 'destination .jpg';

$d = compress($source_img, $destination_img, 90);
?>

REFERENCE

但是,这只是通过指定一定的质量进行压缩。目前我正在开发图像上传功能。我没有像往常一样设置硬文件大小限制,而是希望压缩大于文件大小限制的上传图像,以使其低于文件大小限制。有没有办法可以做到没有尝试和错误?

3 个答案:

答案 0 :(得分:1)

是的,您可以使用http://phpthumb.sourceforge.net/。在image processing features列表中显示

  
      
  • 可以自动调整质量以适应特定的输出字节大小。
  •   

还有https://www.phpclasses.org/package/3810-PHP-Optimize-images-to-fit-in-a-given-file-size-limit.html

答案 1 :(得分:0)

不,因为没有一个jpeg库支持这种功能(jpeg压缩与内容有关)。您可以为它们提供压缩参数(质量,量化表),但不能给出压缩目标。

试用和错误解决方案对于大多数用途来说需要太长时间。不过,你的目的可能会有所不同。但如果没有,并且你绝对需要压缩低于特定文件大小的图像,你可以尝试重用非常相似的图像中的质量参数(例如,在同一分钟拍摄的照片)。

附录,因为我无法添加评论: jpegfit将尝试获得完美匹配,这意味着它将在完整的迭代次数(默认为16)后停止,并且phpthumb将质量降低太强(默认值为82,70,60,52,46,40,35,30 ,26,22,...)我的口味。

答案 2 :(得分:0)

  

我没有像往常一样设置硬文件大小限制,而是想压缩大于文件大小限制的上传图像,以便它低于文件大小限制。有没有办法可以做到这一点没有尝试和错误?

因此,您不一定要将文件压缩到文件大小限制之下。而且你不想尝试和错误。解决方案是将质量设置为0.如果大小低于限制,那么您就成功了。如果它在上面,那么就没有办法让文件低于这个大小。