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);