Так уж вышло, что серверные библиотеки imagick и GD, которые обрабатывают изображения, не могут сделать их такими, какие они нужны PageSpeed (оптимизированными). Для оптимизации изображений без потери качества нужен сторонний пакет, а точнее пакеты для оптимизации png и jpeg изображений. Ими могут быть:
JPEG
jpegoptim
JPEGmini
Jpegtran
PNG
optipng
pngcrush
pptiPng
tinyPng
pngout
Рекомендую ставить optipng и jpegoptim, потому что они проверены и другие я не пробовал) Для установки на сервер необходимы права на установку пакетов, которых нет на обычном shared хостинге, но обычно есть на VPS/VDS. Если у вас shared хостинг, то спросите у тех. поддержки о наличии одного из этих пакетов и возможности их установить, при их отсутствии.
Либо установите сами, через терминал:
apt-get install jpegoptim optipng
или
yum install jpegoptim optipng
Затем нужно найти все jpg и png изображения и оптимизировать их. Ищем jpg изображения и оптимизируем их (не забывайте про аналогичное расширение jpeg):
find /путь/к/сайту -name "*.jpg" -exec jpegoptim {} --strip-all \;
Будьте внимательны, при использовании --strip-all удаляются метаданные изображений, такие как название фотоаппарата, геоданные и т.д. Если это критично, то уберите --strip-all из команды.
Для PNG:
find /путь/к/сайту -name "*.png" -exec optipng {} \;
Если у вас все получилось и вы все еще читаете, значит можно добавить автоматическую обработку изображений в класс обработки изображений OpenCart, который находится по адресу system/library/image.php. Для этого необходимы права на вызов функции exec. В файл нужно добавить закомментированные строки.
public function save($file, $quality = 90) {
$info = pathinfo($file);
$extension = strtolower($info['extension']);
if (is_resource($this->image)) {
if ($extension == 'jpeg' || $extension == 'jpg') {
imagejpeg($this->image, $file, $quality);
// exec('jpegoptim "' . $file . '"', $output, $result);
} elseif($extension == 'png') {
imagepng($this->image, $file);
// exec('optipng "' . $file . '"', $output, $result);
} elseif($extension == 'gif') {
imagegif($this->image, $file);
}
imagedestroy($this->image);
}
}