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

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

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

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

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

    $original_file = '/file_path/img_name.jpg';
    $image = new Imagick($original_file);

    // Сохраняет цветовой профиль
    $icc_profile = $image->getImageProfiles('icc', true);
    
    // Очищает изображение от лишней информации
    $image->stripImage(); 

    // Если цветовой профиль не пустой, то возвращает его
    if(!empty($icc_profile)) {
       $image->profileImage('icc', $icc_profile['icc']);
    }
    
    // записывает изображение в файл 
    $image->writeImage('/file_path/result_image.png');
    
    // или отображает изображение на экране
    header('Content-Type: image/' . $image->getImageFormat());
    echo $image;

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

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