Androidアプリで表示できないJPEG画像がある

android-jpegteniteoのユーザーから問合せがあって調査したときの覚書。

 

<現象>

  • 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プロファイル)の記述があった。

image

運営しているのが紙媒体を作ってるデザイナーの人が多いのでこれはしょうがないか。。。

 

<考えた対応策>

  • 正しい形式でアップロードし直す
  • そんな画像でもエラーにならないTitaniumモジュールを作る
  • Picasa API経由で元画像より小さい画像を指定すると、CMYK情報が削除されたJPGを配信してくれるので、これを利用する
    → 大きいサイズの画像をアップロードする運用にしておけばよかったと後悔中

 

Titaniumモジュールを作る場合は下記を参考にすると出来る気がする。

 

元画像があるならアップロードし直すべき。

 

< Related Posts >