Оптимизация jpg-картинок

Гуглосервис PageSpeed Insights рекомендует «проводить базовую и расширенную оптимизацию всех изображений… При расширенной оптимизации проводится сжатие файлов JPEG и PNG (без потерь).»

PNG, которые используются в верстке, я сжимаю сервисом tinypng, а вот про сжатие JPG как-то не задумывался. В PageSpeed по этому поводу написано: «Для файлов JPEG рекомендуется использовать jpegtran или jpegoptim (доступно только для Linux, выполнять с параметром --strip-all).»
На хостинге обнаружился jpegtran, и я быстренько сделал такой плагин:

$e = &$modx->event;
if (!function_exists('optimizeJPG')) {
    function optimizeJPG($file) {
	$ext = strtolower(end(explode('.', $file)));
	if ($ext == 'jpeg' || $ext == 'jpg') {
            $cmd = '/usr/bin/jpegtran -optimize -progressive -copy none -outfile '.escapeshellarg($file.'_').' '.escapeshellarg($file);
	    exec($cmd, $result, $return_var);
	    @rename($file.'_',$file);	
	}
    }
}
if ($e->name == "OnFileBrowserUpload" || $e->name == "OnFileManagerUpload") {
    optimizeJPG($filepath.'/'.$filename);
}
if ($e->name == "OnSimpleGalleryRefresh") {
    optimizeJPG(MODX_BASE_PATH.$sg_image);
}

Для работы плагина нужно наличие на сервере jpegtran и права на выполнение функции exec.
Плагин выполняет оптимизацию при загрузке картинок через KCFinder, управление файлами, SimpleGallery (для нее можно также оптимизировать уже загруженные картинки).
Дополнительно поправил phpthumb и получил-таки зачет за оптимизацию (:

3 комментария

avatar
Спасибо за полезный плагин!
Если я правильно понимаю он род EVO написан?

Может быть у тебя есть аналогичный плагин так же и для REVO?
avatar
Не помню, наверное не делал для Revo. В примере выше тоже не мешало бы исправить кое-что: иногда эта оптимизация приводит к тому, что файл получается больше, чем исходный (:
avatar
а где правил phpthumb ?)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.