Есть ли способ сжать изображение, чтобы оно было ниже определенного предела размера файла?

Чтобы сжать изображение в 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);
?>

ССЫЛКА

Тем не менее, это только для сжатия, указав определенное качество. В настоящее время я работаю над функцией загрузки изображений. Вместо того, чтобы устанавливать жесткий предел размера файла, как обычно, я бы хотел сжать загруженное изображение, которое превышает ограничение размера файла, чтобы оно было ниже предела размера файла. Есть ли способ, которым я могу сделать это без попыток и ошибок?

3 ответа

Да, вы можете использовать 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. Если размер ниже предела, то вы добились успеха. Если это выше, то нет способа получить файл ниже этого размера.

Нет, потому что ни одна из библиотек jpeg не поддерживает такую ​​функцию (сжатие jpeg зависит от содержимого). Вы можете дать им параметры сжатия (качество, таблицы количественного определения), но не целевые показатели сжатия.

Метод проб и ошибок в большинстве случаев занимает слишком много времени. Ваша цель может быть другой, хотя. Но если нет, и вам абсолютно необходимо сжать изображения ниже определенного размера файла, вы можете попытаться повторно использовать параметры качества очень похожих изображений (например, фотографий, снятых в одну минуту).

Приложение, поскольку я не могу добавить комментарий: jpegfit попытается получить идеальное соответствие, то есть оно остановится после полного числа итераций (16 по умолчанию), а phpthumb слишком сильно снизит качество (по умолчанию, 82,70,60,52,46,40,35,30,26,22,...) на мой вкус.

Другие вопросы по тегам