PHP / Laravel — Как сжать загруженный файл изображения по размеру файла

Я обнаружил, что изображения могут быть сжаты на определенный процент. Например:

$compressed_img = compress($source_img, $destination_img, 90);

В этом случае размер $source_img будет уменьшен до 90% от исходного размера.
Если оригинальный размер $source_img 100 КБ, что из $compressed_img будет 90кб.

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

Например, что если вам нужно убедиться, что все загруженные файлы меньше 200 КБ но Вы не должны изменять размер, если загруженный размер уже легче?

Вот псевдокод.

if($source > 200kb){
$compressed = compressByByte($source, 200kb);
}//Again, this is a sude code!

Так как размер исходного файла варьируется, нецелесообразно использовать compress() функция.

Любой совет будет оценен. (Я использую php с Laravel 5.2)

1

Решение

Я думаю, что вы исходите из неверного предположения: когда вы сжимаете изображение, вы можете указать коэффициент сжатия, но это не значит, что выход составляет 90% от исходного размера, это сильно зависит от содержимого изображения, некоторые изображения могут быть лучше сжаты другие (одноцветное изображение может быть меньше, чем обычное фото).

Тем не менее, что вы можете сделать, это

  1. цикл всех изображений
  2. проверьте, не превышает ли размер изображения определенный вами пороговый размер (например, 200 КБ
  3. для каждого изображения сохраните сжатую версию изображения в качестве временного файла
  4. сопоставьте исходный размер изображения с временным размером, и вы можете сохранить исходный размер или использовать новый сжатый.

Помните, что увеличение сжатия в JPEG снижает качество изображения, и вы начинаете видеть низкое количество уродливых ошибок в изображениях, если сжатие слишком высокое, обычно мы не используем сжатие ниже 85.

0

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

Других решений пока нет …

По вопросам рекламы [email protected]