2017-09-26 93 views
1

在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

然而,这仅是通过指定一定的质量来压缩。目前我正在开发图片上传功能。与往常一样设置硬文件大小限制,我想压缩大于文件大小限制的上传图像,以便它低于文件大小限制。有没有一种方法可以做到这一点WITHOUT尝试和错误?

+1

我不这么认为:) – Manav

回答

0

不,因为没有任何jpeg库支持这种功能(jpeg压缩取决于内容)。你可以给他们压缩参数(质量,量化表),但没有压缩目标。

对于大多数用途而言,试验和错误解决方案花费的时间太长。不过,你的目的可能不同。但是,如果没有,并且您绝对需要压缩特定文件大小以下的图像,则可以尝试重复使用来自非常相似图像的质量参数(例如,在同一分钟内拍摄的照片)。

附录,因为我不能添加评论: jpegfit会尝试获得完美匹配,这意味着它将在迭代完成后(默认为16)停止,并且phpthumb将过分强烈地降低质量(默认,82,70,60,52,46,40,35,30,26,22,...)为我的口味。

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

+0

你有我的最爱。但是内部这个工具很可能会使用尝试和错误,也许有一些更复杂的方法。 – Leif

+0

可用的方法并不多,我认为这是值得一试的。 – ProEvilz

0

而不是设置一个硬文件大小限制和往常一样,我想压缩上传的图片比文件大小限制,所以它会低于文件大小限制。有没有一种方法可以做到这一点没有尝试和错误?

所以你不一定要压缩文件只是下面的文件大小限制。你不想尝试和错误。解决方案是将质量设置为0.如果大小低于限制,那么您已成功。如果它在上面,那么没有办法让文件低于这个尺寸。

相关问题