[Android] アプリ容量削減のため画像ファイルをWebP(ウェッピー)変換してみた
はじめに
こんにちは!Androidエンジニアの山本です。Google Play Storeに公開するアプリはファイルサイズが100MB以内でなければ製品版を公開できません。今回は少しでもアプリサイズを小さくするためにAndroid StudioのWebP変換機能を使ってアプリ内にある大量の画像ファイルを圧縮してみたので情報共有します。
WebPとは
WebPとはGoogleが開発している静止画のフォーマットで、拡張子は「.webp」です。PNGやJPEGよりも約25%ファイルサイズを小さくできるのでアプリサイズやトラフィック量の削減、表示速度を向上させることができます。
開発環境・前提条件
OSはmacOS Mojave(10.14.6)、Android Studioのバージョンは3.5.2です。AndroidStudioでWebP変換できるフォーマットはPNG, JPEG, BMP, 静的GIF画像です。
WebP変換手順
AndroidStudioで画像ファイルを右クリックするとメニューが出るので「Convert to WebP」を選択します。画像ファイルは複数選択することができます。
「Converting Images to WebP」ダイアログが表示されました。
上記ダイアログにてWebP変換の2つの圧縮方法が選択できます。一つは非可逆圧縮の「Lossy encoding」でもう一つは可逆圧縮の「Use lossless encoding」です。Lossy encodingのみオプションにEncoding quality(エンコードの質)と保存する前にプレビューを表示するかどうかを指定することができます。共通オプションとして、Skip files where the encoded result is larger than the original(変換結果が元画像よりも大きくなる場合にスキップ)とSkip images with transparency/alpha channel(透過やアルファ指定がされている画像をスキップ)を指定することができます。
プレビューを表示した場合は、結果を確認しながら圧縮比率の調整ができます。上記スクリーンショットは手元にある写真をプレビュー表示したところです。Lossy encoding(75%)でWebP変換したところファイルサイズを約1/5にすることができました。ちなみにLossless encodingを試したところ、ファイルサイズが2倍以上に増えてしまったので画像ファイルが大きくなった場合のスキップ設定は入れておきましょう。
オリジナル画像の情報
種類: JPEG
ファイルサイズ: 3.4MB
画像サイズ: 4032 × 3024 pixels
DPI: 72 pixels/inch
Lossy converting(75%)のWebP変換結果
3.4MB → 739.8KB
Use Lossless convertingのWebP変換結果
3.4MB → 8.7MB
比較
ImageOptimという画像圧縮ツールですでに圧縮していたJPG(写真) 111枚とPNG(イラスト) 1130枚の合計1241枚の画像をWebP変換した結果です。
変換前フォルダサイズ
Lossy encoding (75%)後のフォルダサイズ
23%程度の容量削減に成功しました。WebP変換でサイズが減ったファイルは723件でした。(JPEG 3件、PNG 515件は容量が増えるので変換されず)
WebP変換前
82.4MB
↓
WebP変換後
63.8MB
Lossless encoding後のフォルダサイズ
2.5%の削減に成功しました。WebP変換でサイズが減ったファイルは641件でした。(JPEG 111件、PNG 489件は容量が増えるので変換されず)
WebP変換前
82.4MB
↓
WebP変換後
80.4MB
まとめ
すでにImageOptimで圧縮しているにもかかわらず、ほぼ画質を維持しつつ大きくファイルサイズが削減できたのは驚きでした。アプリ内に大量の画像がある場合はお手軽にアプリサイズが削減できるのでおすすめです。