Imagick で CMYK の画像を sRGB に変換する
御多分にもれず群馬県で日本を統一した kimoto です。
とあるシステムにて、「IE で画像をアップしたらうまくいかない」という連絡をいただきました。
その現象の起きた画像をもらい開発環境で確認したところ、画像が表示されず、[×] 状態となってしまいました。
いろいろと調査をしてみたところ、元画像の色指定が CMYK だったことに起因していたことがわかりました。IE では CMYK 形式の画像を表示できません。
そこで今回、ImageMagick を使ってサーバ側で自動で sRGB に変換してみようと思います。
今回は Imagick のライブラリを利用しています。
$filePath = '/path/to/your/file.jpg';
$image = new Imagick($filePath);
// CMYK だったら sRGB に変換する
$cs = $image->getImageColorspace();
if ($cs == Imagick::COLORSPACE_CMYK) {
$image->setImageColorspace(Imagick::COLORSPACE_SRGB);
$image->setImageFormat('jpeg');
}
$image->writeImage($filePath);
やってることは単純で、CMYK かどうかを判定して、true であれば sRGB に変換する、というものです。
ただし、これをすると色味がおかしくなってしまうという問題があります。
サービスによっては、実運用に耐えない場合もありますので、ご利用は計画的にどうぞ。