Androidはワンツーパンチ 三歩進んで二歩下がる

プログラミングやどうでもいい話

Androidの4.3未満でCMYK形式の画像が表示できない件

先日お問い合わせがあって、ある画像だけがアプリで表示できないという現象が発生しました。
その時のメモです。

表示できていない箇所はネットワーク上にある画像ファイルをImageViewで表示する箇所でした。
(正確にはNetworkImageViewというImageViewを継承したクラスを使用してます 。
https://developer.android.com/training/volley/request.html)

表示できていないファイルはjpegファイルで、問題が発生したのは
Sony Xperia SOL22 Android 4.2.2でした。
手持ちのSony Xperia SOL25 Android 4.4.2では表示出来ました。

その問題の画像のカラーモードがCMYK形式だったのです。

印刷用のカラーモードであるCMYK形式とRGB形式では、再現できる色の領域(色空間・カラースペース)が異なります。
Web用に適しているのはRGB形式です。
CMYKとは|Cyan Magenta Yellow Key plate color model - 意味/解説/説明/定義 : IT用語辞典
カラーモード(RGBカラーとCMYKカラー)とは?|データ作成の前に|印刷通販の【WAVE】

Androidの公式サイトではJPEG形式はサポートされているとはありますが、
CMYK形式については特に何も注意書きなどありません。
Supported Media Formats | Android Developers

参考にさせていただいたサイト様によると、CMYKICCプロファイルが埋め込んであるためエラーになるとのことでした。(ありがとうございますm(__)m)
SE奮闘記: Androidアプリで表示できないJPEG画像がある

何で機種によって表示できたり出来なかったりするのかなーと思いましたが、下記のissueを読むとAndroid 4.3では直っているはずという書き込みがありました。

Issue 69 - skia - unable to read some jpeg files on android - 2D Graphics Library - Google Project Hosting

Issue 57502 - android - BitmapDecoder doesn't decode JPG/JPEG images with custom ICC profile (CMYK) - Android Open Source Project - Issue Tracker - Google Project Hosting

ということで、過去のバグなのですね。


最後に、問題解決の方法ですが画像をRGB形式に変換してアップロードし直していただきました。
その際下記のようなサイトをご紹介いたしました。

www.cmyk2rgb.com