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

Разработка Зотиков Сергей 2 комментария

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

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

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

PHP
<?php
$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();

Комментарии 2

  1. Евгений

    И на сколько удаление метаданных уменьшает вес изображения?

  2. Алексей

    Не на сколько, это мизер. После таких манипуляций, как бы не увеличился вес: удалили мета данные, перезаписали файл и не факт, что он стал меньше хоть на байт)

Поддерживаются `код`, **жирный**, *курсив* и блоки кода

Как оформить
ПишетеПолучится
`npm install`код в строке: npm install
```bash
npm install
npm run build
```
блок кода: три обратные кавычки — отдельной строкой до и после кода; язык подсветки (bash, php, sql) — по желанию, сразу после первых кавычек
**важно**важно
*термин*термин
https://example.comссылка: адрес достаточно вставить как есть
Наверх