Насколько я вижу из исходников, опенкартовкая библиотека сохраняет все PNG-картинки с качеством ноль. Для GDLib, ноль в PNG — это значит без сжатия.
/system/library/image.php:
public function save($file, $quality = 90) {
$info = pathinfo($file);
$extension = strtolower($info['extension']);
if ($extension == 'jpeg' || $extension == 'jpg') {
imagejpeg($this->image, $file, $quality);
} elseif($extension == 'png') {
imagepng($this->image, $file, 0);
} elseif($extension == 'gif') {
imagegif($this->image, $file);
}
imagedestroy($this->image);
}
Как видно из строки №46, опенкарту совершенно по барабану на то, какое качество сжатия указывалось при сохранении картинки в PNG-формат. Он всё равно будет использовать 0 (без сжатия). Чтобы добавить поддержку сжатия PNG, я бы поправил этот файл примерно так (см. строки 46-47):
public function save($file, $quality = 90) {
$info = pathinfo($file);
$extension = strtolower($info['extension']);
if ($extension == 'jpeg' || $extension == 'jpg') {
imagejpeg($this->image, $file, $quality);
} elseif($extension == 'png') {
$quality = round((100-$quality)/10) > 9 ? 9 : round((100-$quality)/10);
imagepng($this->image, $file, $quality);
} elseif($extension == 'gif') {
imagegif($this->image, $file);
}
imagedestroy($this->image);
}
В GDLib (при сохранении PNG) качество указывается от 0 (без сжатия) до 9 (максимальное сжатие). Так что round((100-$quality)/10) даст примерно подходящее по смыслу значение.