WebP形式の画像をAndroidで表示する話

拙作のアプリ“Wish Registry”ではPlayストアのアイコン画像を取得し,ImageView(正確にはオープンソースライブラリのSmartImageView)に表示している。

しかし,開発機のNexus5では正常に表示されるが,どうやらICS端末だと綺麗に表示されない自体がやや起きるみたい。

これは何でぞや,と思って少し調べた結果を書いておく(あんまりオンラインに情報はなかった@日本語の範囲で)。

画像のフォーマットが問題だった

最初に結論を持ってきてしまったが,この問題の原因は”WebP”という見慣れない画像フォーマットにあった。

Playストアのアプリアイコンはこの形式で保存されていて,例えばWishRegistry(Playストア)でアイコンのリンク先はここになっている。そしていざ画像を保存しようとすると拡張子は”.webp”になっているんだね。

WebPとは

この見慣れない”.webp”という拡張子は何なのだろう。Wikipediaに記載があった。

WebP(ウェッピー[2])は、米 Google が開発しているオープンな静止画フォーマット。ファイルの拡張子は「.webp」。

つまり.jpgとか.pngよりも容量が小さくて済む画像フォーマットという位置づけで,Googleが開発=Androidにも使うことになりそう? という感じ。

解決策

どうやらNexus5などのようなKitKat端末では標準でWebP形式のファイルがサポートされているようで,このリンクURLをSmartImageViewに指定してもちゃんと表示される一方で,ICSなどではサポート外のようだ。

だったらこのWebPをPNGに変換すればいいじゃない? と思って昨夜から調べたけど,どうやらそんなライブラリはないみたい。かろうじて,ここに情報があったけど,これはJNIを使う方法でよくわからないし,それでうまくいく保証はないなあ……と凹んでいたんだけど,どこかのサイトで驚くべき情報を得た。

WebP画像のURLから”-rw”を除くとPNGになるよ。

なんということでしょう(愕然)。

試しに,URLから”-rw”を抜いて先ほどの画像を開いてみると,確かにPNGになる。

ということで,ICS以下でWebP画像を表示するときは,“URLの末尾から-rwを取る”ということで実に簡単に解決できる。なんとまあ。

参照したサイトを思い出せないので手柄を横取りしたみたいで申し訳ないんだけど,今後の誰かの参考になれば幸いである。