[Python] png形式をwebpに変換する方法

PythonでPNG形式の画像をWebP形式に変換するには、Pillowライブラリを使用するのが一般的です。

まず、Pillowをインストールし、Imageモジュールを使ってPNG画像を読み込み、saveメソッドでWebP形式に変換して保存します。

具体的には、Image.open('input.png')で画像を開き、img.save('output.webp', 'webp')でWebP形式に変換して保存します。

PillowはPNGやWebPなど多くの画像フォーマットをサポートしています。

この記事でわかること
  • Pillowライブラリのインストール方法
  • PNG画像をWebP形式に変換する手順
  • 他の画像形式からの変換方法
  • 画質や圧縮率の調整方法
  • WebP形式の特徴と利点

目次から探す

Pillowライブラリのインストール方法

Pillowは、Pythonで画像処理を行うための強力なライブラリです。

特に、画像の読み込み、変換、保存などの操作が簡単に行えるため、画像処理を行う際に非常に便利です。

Pillowは、Python Imaging Library(PIL)のフォークであり、さまざまな画像形式に対応しています。

この記事では、Pillowライブラリのインストール方法について詳しく解説します。

Pillowをインストールすることで、PNG形式の画像をWebP形式に変換するなど、さまざまな画像処理が可能になります。

まずは、Pillowをインストールして、画像処理の世界に足を踏み入れましょう。

PNG形式の画像を読み込む

PNG形式の画像を読み込むためには、Pillowライブラリを使用します。

以下では、画像ファイルのパス指定方法、Image.open()メソッドの使い方、そして画像の読み込みエラーへの対処法について詳しく解説します。

画像ファイルのパス指定方法

画像ファイルを読み込む際には、ファイルのパスを正しく指定する必要があります。

パスは、絶対パスまたは相対パスのいずれかで指定できます。

以下のように、ファイルの場所に応じて適切なパスを設定します。

  • 絶対パス: 例 /Users/username/images/sample.png
  • 相対パス: 例 ./images/sample.png(現在のディレクトリからの相対位置)

Image.open()メソッドの使い方

Image.open()メソッドを使用して、指定したパスの画像ファイルを開きます。

以下は、PNG形式の画像を読み込むサンプルコードです。

from PIL import Image
# 画像ファイルのパスを指定
image_path = 'path/to/your/image.png'
# 画像を開く
try:
    img = Image.open(image_path)
    img.show()  # 画像を表示
except FileNotFoundError:
    print("指定したファイルが見つかりません。")

このコードを実行すると、指定したパスのPNG画像が表示されます。

ファイルが存在しない場合は、エラーメッセージが表示されます。

画像の読み込みエラーへの対処法

画像を読み込む際にエラーが発生することがあります。

主なエラーとその対処法は以下の通りです。

スクロールできます
エラーの種類原因対処法
FileNotFoundError指定したファイルが存在しないパスを確認し、正しいファイル名を指定する
OSError画像ファイルが破損している別の画像ファイルを使用する
UnidentifiedImageError対応していない画像形式対応形式の画像を使用する

これらのエラーに対処することで、PNG形式の画像をスムーズに読み込むことができます。

WebP形式への変換方法

PNG形式の画像をWebP形式に変換するためには、Pillowライブラリのsave()メソッドを使用します。

以下では、save()メソッドの基本的な使い方、WebP形式で保存する際のオプション、そしてPNGからWebPへの変換の具体例について解説します。

save()メソッドの基本的な使い方

save()メソッドを使用することで、画像を指定した形式で保存することができます。

基本的な構文は以下の通りです。

image.save('保存先のファイル名', format='保存形式')

ここで、保存先のファイル名には保存したいファイル名を、保存形式には保存する形式(この場合は’WEBP’)を指定します。

WebP形式で保存する際のオプション

WebP形式で画像を保存する際には、いくつかのオプションを指定することができます。

主なオプションは以下の通りです。

スクロールできます
オプション名説明
quality画質を指定(0〜100の範囲)
losslessロスレス圧縮を使用するかどうか(True/False)
method圧縮方法を指定(0〜6の範囲)

これらのオプションを使用することで、保存するWebP画像の品質や圧縮方法を調整できます。

PNGからWebPへの変換の具体例

以下は、PNG形式の画像をWebP形式に変換する具体的なサンプルコードです。

from PIL import Image
# PNG形式の画像を開く
png_image_path = 'path/to/your/image.png'
img = Image.open(png_image_path)
# WebP形式で保存する
webp_image_path = 'path/to/your/image.webp'
img.save(webp_image_path, format='WEBP', quality=80)  # 画質80で保存

このコードを実行すると、指定したPNG画像がWebP形式に変換され、指定したパスに保存されます。

画質は80に設定されており、適度な圧縮が行われます。

WebP形式の特徴と利点

WebP形式は、Googleが開発した画像フォーマットで、特にウェブでの使用を目的としています。

以下では、WebP形式のメリット、PNG形式との違い、そしてWebP形式のサポート状況について詳しく解説します。

WebP形式のメリット

WebP形式には、以下のようなメリットがあります。

スクロールできます
メリット説明
高い圧縮率同じ画質でPNGやJPEGよりもファイルサイズが小さくなる。
ロスレスおよびロス圧縮対応画質を保ちながら圧縮するロスレス形式と、圧縮率を重視するロス形式の両方に対応。
アニメーション対応GIFのようにアニメーションを含む画像を作成できる。
透明度のサポートPNGと同様に透明度を持つ画像を作成できる。

これらのメリットにより、WebP形式は特にウェブサイトのパフォーマンス向上に寄与します。

PNG形式との違い

WebP形式とPNG形式の主な違いは以下の通りです。

スクロールできます
特徴WebP形式PNG形式
圧縮方式ロスレスおよびロス圧縮ロスレス圧縮
ファイルサイズ小さい(高圧縮率)大きい(圧縮率が低い)
アニメーション対応対応非対応
透明度のサポート対応対応

WebP形式は、特にファイルサイズを重視する場合に優れた選択肢となります。

WebP形式のサポート状況

WebP形式は、主要なウェブブラウザで広くサポートされています。

以下は、主要なブラウザのWebP形式のサポート状況です。

スクロールできます
ブラウザ名サポート状況
Google Chrome対応
Mozilla Firefox対応
Microsoft Edge対応
Safariバージョン14以降で対応
Internet Explorer非対応

このように、WebP形式は多くのブラウザでサポートされており、ウェブでの使用に適しています。

ただし、古いブラウザや特定の環境では未対応のため、使用する際には注意が必要です。

変換時の画質や圧縮率の調整

WebP形式に変換する際には、画質や圧縮率を調整することで、最適な画像を得ることができます。

以下では、画質を指定する方法、圧縮率を調整する方法、そして画質とファイルサイズのバランスについて解説します。

画質を指定する方法

WebP形式で画像を保存する際には、save()メソッドqualityオプションを使用して画質を指定できます。

画質は0から100の範囲で設定でき、数値が大きいほど画質が高くなります。

以下は、画質を指定してWebP形式で保存するサンプルコードです。

from PIL import Image
# PNG形式の画像を開く
png_image_path = 'path/to/your/image.png'
img = Image.open(png_image_path)
# 画質を指定してWebP形式で保存
webp_image_path = 'path/to/your/image.webp'
img.save(webp_image_path, format='WEBP', quality=90)  # 画質90で保存

このコードでは、画質を90に設定してWebP形式で保存しています。

画質を調整することで、画像の見た目を最適化できます。

圧縮率を調整する方法

圧縮率は、画質とファイルサイズに直接影響を与えます。

WebP形式では、qualityオプションを使用して圧縮率を調整できます。

画質を下げることで圧縮率が上がり、ファイルサイズが小さくなります。

逆に、画質を上げると圧縮率が下がり、ファイルサイズが大きくなります。

以下は、異なる画質で保存した場合のファイルサイズの例です。

スクロールできます
画質ファイルサイズ(例)
100500 KB
90300 KB
80200 KB
70150 KB

このように、画質を調整することで圧縮率を変えることができます。

画質とファイルサイズのバランス

画質とファイルサイズのバランスを取ることは、特にウェブサイトでの画像使用において重要です。

高画質の画像は見栄えが良いですが、ファイルサイズが大きくなるため、ページの読み込み速度に影響を与える可能性があります。

一方、低画質の画像はファイルサイズが小さくなりますが、視覚的な品質が損なわれることがあります。

最適なバランスを見つけるためには、以下のポイントを考慮することが重要です。

  • 目的に応じた画質設定: ウェブサイトのデザインや用途に応じて、適切な画質を選択します。
  • テストと比較: 異なる画質設定で画像を保存し、実際に表示して比較します。
  • ユーザー体験を重視: 画像の見た目とページの読み込み速度の両方を考慮し、最適な設定を見つけます。

これらのポイントを考慮することで、画質とファイルサイズのバランスを最適化し、ユーザーにとって快適な体験を提供することができます。

複数のPNG画像を一括でWebPに変換する方法

複数のPNG画像を一括でWebP形式に変換することは、特に大量の画像を扱う場合に非常に便利です。

以下では、複数ファイルの読み込み方法、ループ処理を使った一括変換、そして変換後のファイル名の自動生成について解説します。

複数ファイルの読み込み方法

複数のPNGファイルを読み込むためには、Pythonのosモジュールを使用して指定したディレクトリ内のファイルを取得します。

以下のコードは、特定のディレクトリ内のすべてのPNGファイルをリストアップする方法です。

import os
# PNGファイルが格納されているディレクトリのパス
directory_path = 'path/to/your/directory'
# ディレクトリ内のPNGファイルをリストアップ
png_files = [f for f in os.listdir(directory_path) if f.endswith('.png')]
print(png_files)  # PNGファイルのリストを表示

このコードを実行すると、指定したディレクトリ内のすべてのPNGファイルのリストが表示されます。

ループ処理を使った一括変換

取得したPNGファイルをループ処理を使って一括でWebP形式に変換します。

以下は、先ほどのリストを使って一括変換を行うサンプルコードです。

from PIL import Image
import os
# PNGファイルが格納されているディレクトリのパス
directory_path = 'path/to/your/directory'
output_directory = 'path/to/your/output_directory'
# ディレクトリ内のPNGファイルをリストアップ
png_files = [f for f in os.listdir(directory_path) if f.endswith('.png')]
# 一括変換処理
for png_file in png_files:
    # PNGファイルのフルパスを作成
    png_file_path = os.path.join(directory_path, png_file)
    
    # 画像を開く
    img = Image.open(png_file_path)
    
    # WebP形式で保存するファイル名を作成
    webp_file_name = os.path.splitext(png_file)[0] + '.webp'
    webp_file_path = os.path.join(output_directory, webp_file_name)
    
    # WebP形式で保存
    img.save(webp_file_path, format='WEBP', quality=80)  # 画質80で保存

このコードを実行すると、指定したディレクトリ内のすべてのPNGファイルがWebP形式に変換され、指定した出力ディレクトリに保存されます。

変換後のファイル名の自動生成

変換後のファイル名は、元のPNGファイル名を基に自動生成されます。

os.path.splitext()を使用して、元のファイル名から拡張子を取り除き、新しい拡張子.webpを追加しています。

これにより、元のファイル名を保持しつつ、WebP形式のファイル名を簡単に生成できます。

例えば、元のファイル名がimage1.pngの場合、変換後のファイル名はimage1.webpとなります。

この方法を使用することで、ファイル名の管理が容易になり、変換後のファイルを簡単に識別できます。

変換後のWebP画像の確認方法

WebP形式に変換した画像を確認するためには、表示方法や対応する画像ビューア、メタデータの確認方法を知っておくことが重要です。

以下では、WebP画像の表示方法、WebP対応の画像ビューア、そしてWebP画像のメタデータ確認について解説します。

WebP画像の表示方法

WebP画像を表示する方法はいくつかあります。

最も一般的な方法は、ウェブブラウザを使用することです。

以下の手順でWebP画像を表示できます。

  1. ウェブブラウザを開く: Google Chrome、Mozilla Firefox、Microsoft Edgeなどの最新のブラウザを使用します。
  2. 画像ファイルをドラッグ&ドロップ: WebP画像ファイルをブラウザウィンドウにドラッグ&ドロップします。
  3. URLを直接入力: ブラウザのアドレスバーにWebP画像のファイルパスを入力して表示します。

これにより、WebP画像を簡単に確認できます。

WebP対応の画像ビューア

WebP形式の画像を表示するためには、対応する画像ビューアを使用する必要があります。

以下は、WebP形式に対応している主な画像ビューアの例です。

スクロールできます
画像ビューア名プラットフォーム特徴
Google ChromeWindows, macOS, Linuxブラウザ内で直接表示可能
Mozilla FirefoxWindows, macOS, Linuxブラウザ内で直接表示可能
IrfanViewWindows軽量で多機能な画像ビューア
XnViewWindows, macOS, Linux多くの画像形式に対応したビューア
GIMPWindows, macOS, Linux高機能な画像編集ソフトウェア

これらのビューアを使用することで、WebP画像を簡単に表示・編集できます。

WebP画像のメタデータ確認

WebP画像のメタデータを確認することで、画像の詳細情報を取得できます。

メタデータには、画像の作成日時、カメラ設定、圧縮率などが含まれています。

メタデータを確認するためには、以下の方法があります。

  1. 画像ビューアを使用: 一部の画像ビューア(例:IrfanViewやXnView)では、画像を右クリックして「プロパティ」や「情報」を選択することでメタデータを確認できます。
  2. コマンドラインツールを使用: exiftoolなどのコマンドラインツールを使用して、メタデータを表示することも可能です。

以下は、exiftoolを使用した例です。

exiftool path/to/your/image.webp

このコマンドを実行すると、指定したWebP画像のメタデータが表示されます。

これらの方法を使用することで、変換後のWebP画像を確認し、必要な情報を得ることができます。

応用例:他の画像形式からWebPへの変換

WebP形式は、JPEG、BMP、GIFなどの他の画像形式からも変換することができます。

以下では、JPEG、BMP、GIFからWebPへの変換方法について具体的なサンプルコードを交えて解説します。

JPEGからWebPへの変換

JPEG形式の画像をWebP形式に変換するには、PillowライブラリのImage.open()メソッドを使用してJPEG画像を読み込み、save()メソッドでWebP形式で保存します。

以下はそのサンプルコードです。

from PIL import Image
# JPEG形式の画像を開く
jpeg_image_path = 'path/to/your/image.jpg'
img = Image.open(jpeg_image_path)
# WebP形式で保存
webp_image_path = 'path/to/your/image.webp'
img.save(webp_image_path, format='WEBP', quality=85)  # 画質85で保存

このコードを実行すると、指定したJPEG画像がWebP形式に変換され、指定したパスに保存されます。

BMPからWebPへの変換

BMP形式の画像も同様に、Pillowを使用してWebP形式に変換できます。

以下は、BMP画像をWebP形式に変換するサンプルコードです。

from PIL import Image
# BMP形式の画像を開く
bmp_image_path = 'path/to/your/image.bmp'
img = Image.open(bmp_image_path)
# WebP形式で保存
webp_image_path = 'path/to/your/image.webp'
img.save(webp_image_path, format='WEBP', quality=80)  # 画質80で保存

このコードを実行することで、BMP画像がWebP形式に変換されます。

GIFからWebPへの変換

GIF形式の画像をWebP形式に変換する場合も、Pillowを使用します。

GIFはアニメーションを含むことができるため、変換時にアニメーションを保持するかどうかを選択できます。

以下は、GIF画像をWebP形式に変換するサンプルコードです。

from PIL import Image
# GIF形式の画像を開く
gif_image_path = 'path/to/your/image.gif'
img = Image.open(gif_image_path)
# WebP形式で保存(アニメーションを保持する場合は append=True を指定)
webp_image_path = 'path/to/your/image.webp'
img.save(webp_image_path, format='WEBP', save_all=True, quality=75)  # 画質75で保存

このコードを実行すると、GIF画像がWebP形式に変換され、アニメーションが保持されます。

save_all=Trueを指定することで、GIFのすべてのフレームをWebP形式に保存できます。

これらの方法を使用することで、さまざまな画像形式からWebP形式への変換が可能となり、画像の圧縮や表示の最適化が実現できます。

よくある質問

WebP形式に変換すると画質が落ちる?

WebP形式に変換する際、画質が落ちる可能性がありますが、これは設定した画質の値によります。

WebP形式は、ロスレス圧縮とロス圧縮の両方に対応しています。

ロス圧縮を使用する場合、画質を0から100の範囲で指定でき、数値が低いほど画質が低下します。

適切な画質を選択することで、視覚的な品質を保ちながらファイルサイズを小さくすることが可能です。

ロスレス圧縮を選択すれば、画質の劣化はありませんが、ファイルサイズは大きくなる傾向があります。

WebP形式に変換できない場合の原因は?

WebP形式に変換できない場合、以下のような原因が考えられます。

  • 対応していない画像形式: Pillowライブラリがサポートしていない画像形式を使用している場合、変換ができません。
  • ファイルパスの誤り: 指定したファイルパスが間違っている、またはファイルが存在しない場合、変換処理が失敗します。
  • Pillowライブラリのバージョン: 使用しているPillowライブラリのバージョンが古い場合、WebP形式への変換がサポートされていない可能性があります。

最新のバージョンにアップデートすることをお勧めします。

WebP形式はすべてのブラウザで表示できる?

WebP形式は、主要なウェブブラウザで広くサポートされていますが、すべてのブラウザで表示できるわけではありません。

以下は、主要なブラウザのWebP形式のサポート状況です。

  • Google Chrome: 対応
  • Mozilla Firefox: 対応
  • Microsoft Edge: 対応
  • Safari: バージョン14以降で対応
  • Internet Explorer: 非対応

古いブラウザや特定の環境ではWebP形式が表示できないため、WebP画像を使用する際には、代替の画像形式(例:JPEGやPNG)を用意することを検討する必要があります。

これにより、すべてのユーザーに対して適切な画像を提供できます。

まとめ

この記事では、Pythonを使用してPNG形式の画像をWebP形式に変換する方法について詳しく解説しました。

また、Pillowライブラリのインストールから、画像の読み込み、変換、さらには他の画像形式からの変換方法まで幅広く取り上げました。

これにより、画像処理の効率を向上させるための具体的な手法を学ぶことができました。

今後は、WebP形式の特性を活かして、ウェブサイトのパフォーマンスを向上させるために、実際に画像変換を試みてみてください。

  • URLをコピーしました!
目次から探す