要在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);
?>
但是,这只是通过指定一定的质量进行压缩。目前我正在开发图像上传功能。我没有像往常一样设置硬文件大小限制,而是希望压缩大于文件大小限制的上传图像,以使其低于文件大小限制。有没有办法可以做到没有尝试和错误?
答案 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.如果大小低于限制,那么您就成功了。如果它在上面,那么就没有办法让文件低于这个大小。