実際の業務でWebPを使うときのおすすめ変換パラメーター JPEG/PNG編

2020年秋予定の Safari 14 から、iPhoneでもMacでもいよいよ`WebP`を使えるようになります。

WebP対応を進める現場で最も利用されるのは、おそらく[libwebp](https://chromium.googlesource.com/webm/libwebp)に同梱される[cwebp](https://developers.google.com/speed/webp/docs/cwebp)コマンドです。

この`cwebp`コマンドですが、意外と多くのパラメーターが用意されています。

**「実はすごいパラメーターが隠れていて、それを知らなかったらいやだなぁ」**

と思い、数値と視覚で比較するためのショーケースを先日公開しました。

# WebPパラメーターナビ

[WebP パラメーターナビ \- libwebpによるWebP変換の適切なパラメータ選定をお手伝いします。](https://php.simulate.site/webp-params-nav/default/)

このようにパラメーターごとに値を変えるとファイルサイズや画質にどう影響するかや、

![webp-params-explorer (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35178/a5a5d60e-5894-c843-acdf-02c14577374e.png)

実際の仕上がり画質をズームして比較できます。

![webp-params-explorer (25).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35178/47fb6fa6-2220-eb29-2dae-ed0e9d09b2ce.png)

それぞれのセクションで`C`キーを押すと画像をキャプチャするおせっかい機能付き！

WebP利用を検討している方はぜひご覧になってみてください。

# おすすめパラメーター

このショーケースも踏まえ、おすすめのパラメーターの組み合わせを紹介します。

## JPEGから変換するとき

写真調の画像にJPEGが使われている前提で、同様にLossy(非可逆)変換をします。

```bash
cwebp -q 75 -metadata icc -sharp_yuv -o output.webp input.jpg
```

## PNGから変換するとき

PNG画像は元々Lossless(可逆)変換向きの画像であることを前提とします。

```bash
cwebp -lossless -metadata icc -o output.webp input.png
```

## GIFから変換するとき

GIF画像をWebPに変換するには、[gif2webp](https://developers.google.com/speed/webp/docs/gif2webp)コマンドを使いますが、返ってファイルサイズが大きくなってしまうこともあります。

また別の機会で取り上げたいと思います。

## 品質 -q は75がコスパよし

Lossy変換の品質`-q`は最後は各場面で要調整なのですが、**80あたりからファイルサイズが大きくなりやすい傾向**が見られました。

![webp-q-80.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35178/cf07001b-5bee-eac0-484c-ed2dfa4cc06b.png)

80を超えるともう人間が画質の差を知覚することは難しいので、あまり上げても意味がありません。

デフォルトが`-q 75`です。**75は確かにコスパがよい**数値に思えます。

## -metadata icc でICCプロファイルを維持

企業のWebサイトの画像はいろいろなデータソースから集まってきます。

紙媒体用の素材に由来する場合なんかで特に、[ICCプロファイル](https://ja.wikipedia.org/wiki/ICC%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)を含んだ状態で画像ファイルが供給されることがあります。

WebPも現在はICCプロファイルをサポートしていますが、デフォルトでは削除してしまいます。

**「なんかちょっと色味が違う」**というクレームに繋がります。例えば下記の例で**左右の空と草の色味が違う**ことがお分かりでしょうか。

![webp-no-icc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35178/283d2be2-d89d-7e7d-4923-148120999ea6.png)

`-metadata ICC`はこの事象を予防できます。

大半の画像はICCプロファイルを持たず、その場合は作用も副作用もないので保険としておすすめです。

※ PNG画像にICCプロファイルが含まれるケースは経験がないのですが、サポートされているので上記の例では付けておきました。

## -sharp_yuv で色の境界を補正

こちらの記事が大変わかりやすいです。比較画像もアイデアを拝借しました！

[WebP の色劣化問題の改善 \- Qiita](https://qiita.com/yoya/items/f5ef9b66b556eda9e6bf)

WebPのLossyはJPEG同様、色味の境界が弱点です。**WebPはクロマサンプリングが420固定**なので現状、克服不可能です。

以下の例で、品質をいくら上げても境界が縞状にぼやけて色味の違いも生じることが確認できます。

![webp-params-explorer (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35178/d4b778d8-15ea-1e31-d9c4-b257bd5eb456.png)

そこで`-sharp_yuv`を用いると、完璧ではないですが、色味を再現するように頑張ってくれます。真ん中より右の`-sharp_yuv`ありの方が色味がだいぶマシですよね。

![webp-sharp-yuv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35178/8476106a-15a6-ef9b-6b49-0ccfc8eeaee9.png)

企業サイトでは、バナーのタイポグラフィーなどでこの`-sharp_yuv`が効果を発揮します。

![webp-sharp-yuv-typo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35178/4b5db967-2ed1-3d6a-10b8-fc723e8b906f.png)

**デメリットはファイルサイズが大きくなることと処理時間が伸びることですが、ショーケースの例で比較する分にはわずか**です。この効果と天秤にかけると、利用する価値は高いと感じます。

# その他のパラメーター

その他のパラメーターは、有意な違いが見られず、正直よくわからないものが多いです。

`-psnr`は最初すごくいいなぁと思ったのですが、実用に至らなかった(今後に期待！)という記事を先日書きました。

[cwebpコマンドの\-psnrオプションの罠と\-qrangeがやってくる！ \- Qiita](https://qiita.com/miyanaga/items/ed684945b82218449519)

このパラメーターもいいよ！というおすすめがあればぜひコメントなどで教えて下さい。