Сжатие изображения до заранее определенного размера

Я работаю над приложением, которое позволяет пользователям загружать изображения. Мы устанавливаем максимальный размер файла 1 МБ. Я знаю, что есть несколько вариантов сжатия JPEG (и здесь мы имеем дело с jpegs).

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

Если нет, то я подумал, что лучше всего будет использовать цикл while, который смотрит на размер, и просто нажимать на изображение с помощью imagejpeg () с шагом 10%, пока файл не станет ниже предопределенного максимального размера.

Я на правильном пути здесь?

-1

Решение

Это зависит от данных, но с изображениями вы можете взять маленькие маленькие образцы. Понижение частоты изменило бы результат. Вот пример:PHP — Сжатие изображения, чтобы встретить ограничение размера файла.

0

Другие решения

Я выполнил эту задачу, используя следующий код:

$quality = 90;
while(filesize($full_path) > 1048576 && $quality > 20) {
$img = imagecreatefromjpeg($full_path);
imagejpeg($img,$full_path,$quality);

$quality = $quality - 10;
clearstatcache();
}
if(filesize($full_path) > 1048576) {echo "<p>File too large</p>"; unlink($full_path); exit;}

$quality > 20 Часть заявления состоит в том, чтобы не допустить снижения качества сценария до такой степени, которую я бы посчитал необоснованным. Я уверен, что здесь еще многое предстоит сделать. Я мог бы также добавить часть изменения размера разрешения, но это работает для моих текущих потребностей. Это с максимальным размером файла 1 МБ. Если после максимального масштаба качества файл все еще слишком велик, он возвращает ошибку слишком большого размера и удаляет изображение с сервера.

Обратите внимание, что clearstatcache() здесь очень важно Без этого сервер кеширует размер изображения и не заметит изменения размера файла.

Этот скрипт применяется только к JPEG, но есть другие функции php для gif, png и т. Д.

0