PHP уменьшение веса изображения без потери качества
Вес отдаваемых изображений – довольно важный аспект оптимизации скорости загрузки сайта.
Кроме двух распространенных способов уменьшения веса изображения, а именно изменения размеров и ухудшения качества, есть третий способ – удаление сопутствующих данных в файле изображения (чистка метаданных).
Для решения задачи по удалению метаданных из файла изображения можно воспользоваться 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
И на сколько удаление метаданных уменьшает вес изображения?
Не на сколько, это мизер. После таких манипуляций, как бы не увеличился вес: удалили мета данные, перезаписали файл и не факт, что он стал меньше хоть на байт)
Написать комментарий