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

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

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

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

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

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

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

    // Если цветовой профиль не пустой, то возвращает его
    if(!empty($profiles)) {
       $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. Ruslan 23 августа 2023, 12:43 # 1 0
      автор сделал перевод статьи.., он сам не в теме)
    2. Ruslan 23 августа 2023, 12:47 # 0
      даже мне понятно что написано гавно откуда взялся $profiles ?) b и тд
      1. Ruslan 23 августа 2023, 12:52 # 0
        А Функция Imagick::stripImage() — это встроенная функция PHP, которая используется для удаления всех профилей и комментариев с изображения..
        1. Ruslan 23 августа 2023, 12:53 # 0
          bool Imagick::stripImage( void )
          1. Ruslan 23 августа 2023, 12:54 # 0
            https://www.geeksforgeeks.org/php-imagick-stripimage-function/