PHP уменьшение веса изображения без потери качества

PHP уменьшение веса изображения без потери качества

Вес отдаваемых изображений — довольно важный аспект оптимизации скорости загрузки сайта.

Кроме двух распространенных способов уменьшения веса изображения, а именно изменения размеров и ухудшения качества, есть третий способ — удаление сопутствующих данных в файле изображения (чистка метаданных).

Для решения задачи по удалению метаданных из файла изображения можно воспользоваться php-расширением Imagick, ниже привожу пример кода с комментариями:

    $originalFile = '/file_path/img_name.jpg';
    $outputFile = '/file_path/result_image.jpg';

    $image = new Imagick($originalFile);

    // Сохраняем ICC-профиль (цветовой профиль), если он есть
    $iccProfile = $image->getImageProfile('icc');
    
    // Удаляем метаданные (EXIF, IPTC и т.д.)
    $image->stripImage();

    // Восстанавливаем цветовой профиль, если он существовал
    if (!empty($iccProfile)) {
        $image->profileImage('icc', $iccProfile);
    }

    // Сохраняем файл
    $image->writeImage($outputFile);

    // Отдаём изображение в браузер
    header('Content-Type: image/jpeg');
    echo $image->getImagesBlob();

    $image->clear();
    $image->destroy();

Комментарии ()

  1. Евгений 16 мая 2023, 17:40 # 0
    И на сколько удаление метаданных уменьшает вес изображения?
    1. Алексей 16 ноября 2023, 13:51 # 0
      Не на сколько, это мизер. После таких манипуляций, как бы не увеличился вес: удалили мета данные, перезаписали файл и не факт, что он стал меньше хоть на байт)