Androidアプリで表示できないJPEG画像がある
teniteoのユーザーから問合せがあって調査したときの覚書。
<現象>
- teniteoアプリでスナップ写真が表示できない。
 - 特定の写真のみ
 - いくら待っても画面に写真が表示されない。
 
環境:Android(バージョン不明、Titanium SDK 3.1.2.GAで作成)
この写真はPicasaアルバムからAPI経由で配信している。
実際手持ちのAndroid端末でも同様の現象が起きるのを確認。表示できない画像のURLをブラウザアプリで開いても同様に表示できない。
imageViewで表示する際には下記ログを吐いていた。
[DEBUG] skia: --- decoder->decode returned false
[DEBUG] skia: --- SkImageDecoder::Factory returned null
原因はCMYKのICCプロファイルが埋め込んであるため、Android標準の画像処理でエラーになるらしい。
確かに元画像を見るとPhotoshopで加工した形式があって、ファイル情報を見ると「Japan Color 2001 Coated」(日本の標準印刷用CMYKプロファイル)の記述があった。
運営しているのが紙媒体を作ってるデザイナーの人が多いのでこれはしょうがないか。。。
<考えた対応策>
- 正しい形式でアップロードし直す
 - そんな画像でもエラーにならないTitaniumモジュールを作る
 - Picasa API経由で元画像より小さい画像を指定すると、CMYK情報が削除されたJPGを配信してくれるので、これを利用する
→ 大きいサイズの画像をアップロードする運用にしておけばよかったと後悔中 
Titaniumモジュールを作る場合は下記を参考にすると出来る気がする。
- yagitoshiro/ImageAsResized - GitHub
 - Deep Shah's Blog: Fixing the "skia decoder->decode returned false" error while downloading images on Android
 
元画像があるならアップロードし直すべき。
< Related Posts >