【问题标题】:Is there a way to compress image to be below a certain file size limit?有没有办法将图像压缩到某个文件大小限制以下?
【发布时间】:2023-04-08 17:57:01
【问题描述】:

要在 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

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

【问题讨论】:

  • 我不这么认为,伙计:)

标签: php image image-resizing image-compression


【解决方案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

【讨论】:

  • 你有我的支持。但在内部,这个工具很可能会使用试错法,也许会使用更复杂的方法。
  • 可用的方法不多,我觉得值得一试。
【解决方案2】:

我不想像往常一样设置硬文件大小限制,而是想压缩大于文件大小限制的上传图像,使其低于文件大小限制。有没有一种方法可以做到不试错?

因此您不一定要压缩文件只是低于文件大小限制。而且你不想尝试和错误。解决方案是将质量设置为 0。如果大小低于限制,那么您成功了。如果大于,则无法获取小于该大小的文件。

【讨论】:

    【解决方案3】:

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

    对于大多数目的而言,反复试验解决方案花费的时间太长了。不过,您的目的可能不同。但如果不是,并且您绝对需要将图像压缩到特定文件大小以下,您可以尝试从非常相似的图像(例如同一分钟拍摄的照片)中重复使用质量参数。

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

    【讨论】:

      最近更新 更多