Google Pagespeed dapat mengonversi gambar RGB ke ruang warna YUV 4:2:0. Saya ingin melakukan hal yang sama di PHP menggunakan imagick.
Secara singkat, mengapa 4:2:0 diinginkan:
"Filter ini mengurangi pengambilan sampel warna gambar jpeg menjadi 4:2:0. Penglihatan manusia jauh lebih sensitif terhadap perubahan kecerahan dibandingkan perubahan rona atau saturasi, dan pengambilan sampel warna 4:2:0 memungkinkan kami menyimpan data kecerahan sekaligus mengurangi jumlah data rona dan saturasi sebesar 3/4. Hal ini dapat mengurangi ukuran gambar secara signifikan namun hanya memberikan sedikit pengaruh pada persepsi."
Saya telah mencoba mengubah ruang warna dengan imagemagick ke YUV tetapi tidak berfungsi sama sekali! Latar belakang putih berubah menjadi hijau dan warna lainnya salah, ditambah pencahayaan terbalik.
Kode berikut tidak berguna, tetapi ini menunjukkan beberapa hal yang telah saya coba.
Dengan format Google yang dibuat oleh mod_pagespeed gambar yang dihasilkan terlihat bagus di browser. Itulah yang ingin saya capai, gambar untuk web.
$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);