こんにちは。
今回は、PythonでPIL(Pillow)をつかって、PNGやJPG(JPEG)からWebPへの変換をしたいと思います。
WebPに変換する理由としては、画像の容量の低減であることが多いと思います。
本ブログでも、少しでも早く表示できるように、最近は画像をWebPで貼っています。
それでは書いていきます。
PNG/JPGからWebPへの変換(PIL・Pillow)
ここでは、PNG/JPGからWebPへと変換します。
基本的には、PILでの保存の時にフォーマットを指定することで、webp形式で保存することができます。
pngでもjpgでも、読み込みの時のファイルパスが変わるだけで、他は同じです。
from PIL import Image img_file_name = "test.jpg" save_file_name = "test.webp" img = Image.open(img_file_name).convert("RGB") img.save(save_file_name, "webp")
実行して、得られた画像(.webp)と最初の画像(.jpg)を比べてみます。
左にJPEG画像、右にWebP画像を貼ります。
見た目では、ほとんど変わっていないことがわかります。
ここで、画像の容量ですが、以下のようになっており、webp形式とjpegで同じくらいのサイズでした。
- jpg: 92.1 KB
- webp: 92.2 KB
さらに画像容量を小さくする
先ほどの結果だと、jpgとwebpでほとんど同じサイズとなりました。
しかし、これではwebpにするメリットがありません。
そこで、さらに画像の容量を小さくします。
Pillowでは、saveするときに、拡張子ごとにいくつかのパラメータを追加で設定できます。
WebP形式での保存では、以下のパラメータでさらに容量を小さくできます。
- quality: 品質
これには1~100を設定します。(100の方が高画質です) - method: 速度と品質のバランス
これには0~6を設定します。
6の方が遅いですが、容量は小さくできます。
遅いと言いましたが、そんなに気になるほどは遅くはないです。
今回は、qualityを75、methodを6でやってみます。
(当ブログのwebpもそれで作っています)
コードは以下のようになります。
from PIL import Image img_file_name = "test.jpg" save_file_name = "test.webp" img = Image.open(img_file_name).convert("RGB") img.save(save_file_name, "webp", quality=75, method=6)
このコードで作った、画像が以下のようになります。
左がjpg、右がwebpです。
見ると分かるように、見た目はほとんど変わりません。
この画像の容量ですが、以下のようになりました。
- jpg: 92.1 KB
- webp: 72.6 KB
webpの方が、小さいサイズになっていることがわかります。
今回は、PythonでPILを使って、JPGやPNGをWebPへ変換する方法を紹介しました。
今は、JPGの方が主流ですが、これからWebPが多くなってくると思われますので、覚えておいて損はないと思います。