Nezobrazují se JPEGy v IE a Chromu 0
Na současném projektu jsme dokončili rozhraní pro správu bannerů a klient už nám po několika minutách volal s chybou, že se nahraný obrázek nezobrazí. Podíval jsem se na něj ve Firefoxu a v Opeře a vše v pořádku. Ptám se tedy na prohlížeč a zjištuji, že jde o IE8.
Po chvilce na Google jsem přišel na příčinu, která by mě rozhodně dříve nenapadla. Některé (třeba starší IE s tím nemají problém) verze Internet Exploreru a Chromu (snad i starší Firefox byl postižen) mají problém s renderováním JPEGů uložené s CMYK barvami.
Řešení je snadné, pokud jde o designové prvky na webu, které máte pod palcem, a pokud máte po ruce Photoshop nebo GIMP. U obou shodně přejděte v menu na Obrázek / Image > Režim / Mode a zvolte RGB, GIMP dokonce nic jiného neumí.
Problém je, pokud to uživatelé nahrávají na web. Pak je potřeba obrázek načíst přes GD a znovu uložit. Nejnovější funkce imagecreatefromjpeg() a imagejpeg() to převedou do RGB. GD s CMYK pracovat neumí a nevýhoda tohoto řešení je ztráta kvality při změně barev.
$image = imagecreatefromjpeg('/cesta/k/souboru'); imagejpeg($image, '/cesta/k/souboru');
Detekovat jestli je obrázek RGB nebo CMYK lze snadno s funkcí getimagesize()
$info = getimagesize('/cesta/k/souboru'); if (sizeof[$info['channels']) == 3) { echo 'RGB!'; } else if (sizeof($info['channels'] == 4)) { echo 'CMYK!'; }
