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 >