Google Pagespeed может преобразовывать изображения RGB в цветовое пространство YUV 4:2:0. Я хотел бы сделать то же самое в PHP, используя imagick.
Кратко о том, почему желательно 4:2:0:
«Этот фильтр уменьшает дискретизацию цвета jpeg-изображений до 4:2:0. Человеческое зрение гораздо более чувствительно к изменениям яркости, чем к изменениям оттенка или насыщенности, а дискретизация цвета 4:2:0 позволяет нам сохранять данные о яркости, уменьшая количество данных оттенка и насыщенности на 3/4. Это может значительно уменьшить размер изображения, оказывая лишь небольшое влияние на восприятие».
Я попытался изменить цветовое пространство с помощью imagemagick на YUV, но это не работает! Белый фон переходит в зеленый, а остальные цвета неправильные, плюс инвертированная яркость.
Следующий код бесполезен, но он показывает несколько вещей, которые я пробовал.
С форматом Google, созданным mod_pagespeed, результирующие изображения отлично выглядят в браузере. Это то, чего я надеюсь достичь, изображения для Интернета.
$image_info = getimagesize($source_file);
$im = new Imagick();
$im->readImage($source_file);
$profiles = $im->getImageProfiles('*', false);
$has_icc_profile = (array_search('icc', $profiles) !== false);
if ($has_icc_profile === false) {
$icc_srgb = file_get_contents(Mage::getBaseDir('var') . DS . 'metodo' . DS . 'demo_data' . DS . 'AdobeRGB1998.icc');
$im->profileImage('icc', $icc_srgb);
unset($icc_srgb);
}
//$im->setImageColorspace(1);
$im->setInterlaceScheme(Imagick::INTERLACE_PLANE);
$im->setImageCompressionQuality(85);
//$im->stripImage();
$im->setImageColorspace(11);
$im->thumbnailImage($this->_imageSrcWidth, $this->_imageSrcHeight);
//$im->negateImage(false, Imagick::CHANNEL_ALL);
$im->stripImage();
$im->writeImage($fileName);