【Pillow】Pythonで画像をWebpに変換!エラーが出て変換できない場合の対処法も解説

Pythonのライブラリ「Pillow」を使ってJPEGやPNGの画像を「WebP」に変換する方法を解説します。

また、エラーが出てWebPに変換できない場合の対処法についても説明します。

この記事で分かること
  • PillowでWebPに変換する方法
  • エラーが出た場合の対処法
  • JPEG・PNGをWebPに変換した場合の圧縮率



WebPとは

WebP」はJPEGやPNGと比較して画質を維持しつつ、圧縮率を高くできる次世代画像フォーマットです。

WebP形式の画像をサイトに使うことで、ページの読み込みを高速化することができます。

Webpについて、WebPへの変換方法については以下の記事を参考にしてください。

WebP(ウェッピー)とは? メリット・デメリットやPNG・JPEGからの変換方法を解説

WordPressの場合はプラグインを使うことで簡単にWebPに変換できます。

WordPressを使用している方は以下の記事を参考にしてみてください。

EWWW Image OptimizerでJPEG・PNGをWebPに変換

PillowでWebPに変換する方法

まずはPillowをインストールします。

$ pip install Pillow

今回は、以下のディレクトリの構成で作業しています。

「original」フォルダに変換前の元画像「iPhone.JPG」を入れており、変換後のWebP画像を「convert」フォルダに入れます。

WebP/
 ├ WebP.py
 ├ original/
 │ └ iPhone.JPG
 └ convert/ └ iPhone.webp //ここにwebp変換した画像を入れます

WebP変換を行うコードは以下です。

from PIL import Image
img = Image.open('./original/iPhone.JPG')
img.save('./convert/iPhone.webp')

これだけで簡単にWebPに変換できます。

できるはずでしたが、私の場合はエラーが出てwebpには変換できませんでした

以下では、私が出たエラー内容と対処方法について説明します。

「KeyError: ‘webp’」というエラーが出てwebpに変換できない

 私は上記の方法でwebpに変換しようとしましたが、以下のエラーが出てできませんでした。

save_handler = SAVE[format.upper()]
KeyError: 'webp'

私の作業環境は以下です。

anacondaを入れており、Pillowはあらかじめ入っていました。

  • Windows10 Home 64ビット
  • anaconda 4.9.0
  • python 3.8.3
  • Pillow 7.2.0

ちなみにwebpへの変換ではなく、JPEGやPNGへの変換はできました。

少し話はそれますが、JPEGやPNGへの変換は上記のWebPへの変換コードの拡張子を.webpから.jpgや.pngに変更すればできます。

ただし、PNG→JPEGに変換する場合は以下のように.convert('RGB')を付けないとエラーが出ます。

from PIL import Image
img = Image.open('./original/iPhone.png').convert('RGB')
img.save('./convert/iPhone.jpg')

対処方法「Pillowを再インストール」

いろいろと調べて試しても駄目でしたが、Pillowを一度アンインストールして再インストールするとWebPに変換できました

Pillowのアンインストール

$ pip uninstall Pillow

アンインストールしたPillowのバージョンは、7.2.0でした。

Uninstalling Pillow-7.2.0:

Pillowの再インストール

$ pip install Pillow

再インストールしたPillowのバージョンは、8.3.1でした。

Successfully installed Pillow-8.3.1

JPEG・PNGの画像をWebPに変換して圧縮率を確認

JPEGとPNGの画像をWebPに変換して、圧縮率を確認してみます。

JPEG画像は、iPhoneで撮影した以下の画像を使用します。画像サイズは3.40MBです。

(以下の画像はWordPressのプラグインで圧縮後の画像なので、オリジナル画像ではありません。)

PNG画像は、いらすとやでダウンロードした以下の画像を使用します。

画像サイズは512KBです(以下の画像はWordPressのプラグインで圧縮後の画像なので、オリジナル画像ではありません)。

JPEG → WebP の圧縮結果

JPEG画像をWebPとPNGに変換した結果は以下です。

画像フォーマット画像サイズ圧縮率
JPEG(オリジナル)3.40MB
WebP971KB71.4%
PNG11.6MB241%

JPEGをWebPに変換することで大きく圧縮することができました。

見た目の差はほぼわかりません。

JPEGをPNGに変換すると、画像サイズが大きくなってしまいます。

PNG → WebP の圧縮結果

PNG画像をWebPとJPEGに変換した結果は以下です。

画像フォーマット 画像サイズ 圧縮率
PNG (オリジナル) 512KB
WebP 41.3KB91.9%
JPEG 71.2KB86.1%

JPEGに変換した場合よりも、WebPに変換した方が圧縮率を高くすることができます。

見た目の差はほぼわかりません。


Pillowを使って画像をまとめてリサイズする方法は下記の記事に書いているので、参考に見てください。

【Pillow】Pythonで画像をまとめてリサイズ・圧縮!WebPにも変換可能【コピペでOK】

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


検索

アーカイブ

プロフィール

プロフィール背景画像
プロフィール画像

チャベス

1989生まれ、機械機器メーカーで研究開発をしている機械系エンジニアです。 業務効率化や日々の生活を効率化できるプログラミングネタを発信しています。PythonとNotionとSANGO(WordPress)が特に好きです。 詳細プロフィールはこちらnoteにNotionの記事も書いています。

WP-Searchにサイト事例として掲載されています。