【Python】フォルダ内の画像を一括リサイズ・圧縮する方法

【Python】フォルダ内の画像を一括リサイズ・圧縮する方法 Python

ブログやWebサイトを運営していると、画像のファイルサイズや解像度を統一したい場面が多くあります。そこで今回は、Pythonを使って指定フォルダ内の画像を一括でリサイズ・圧縮する方法を紹介します。

使用ライブラリ:Pillow(PIL)

画像の処理には、Pythonの画像処理ライブラリ「Pillow(旧PIL)」を使用します。まずはライブラリをインストールしましょう。

pip install pillow

一括処理スクリプトのサンプルコード

以下のスクリプトでは、指定したフォルダ内の.jpgや.png画像を対象に、横幅を最大800pxにリサイズし、JPEG形式で80%の品質に圧縮して保存します。

from PIL import Image
import os

# 入出力フォルダのパス
input_folder = 'input_images'
output_folder = 'output_images'
max_width = 800  # 最大横幅
quality = 80     # JPEG圧縮品質(0〜100)

# 出力フォルダが存在しない場合は作成
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 対象拡張子
extensions = ('.jpg', '.jpeg', '.png')

# フォルダ内の画像を一括処理
for filename in os.listdir(input_folder):
    if filename.lower().endswith(extensions):
        input_path = os.path.join(input_folder, filename)
        output_path = os.path.join(output_folder, filename)

        with Image.open(input_path) as img:
            # 横幅がmax_widthを超えていればリサイズ
            if img.width > max_width:
                ratio = max_width / float(img.width)
                new_height = int(img.height * ratio)
                img = img.resize((max_width, new_height), Image.LANCZOS)

            # JPEGとして保存(PNGもJPEGに変換)
            rgb_img = img.convert('RGB')
            rgb_img.save(output_path, format='JPEG', quality=quality)

print("画像のリサイズ・圧縮が完了しました。")

フォルダ構成例

project/
├── input_images/
│   ├── sample1.jpg
│   ├── sample2.png
├── output_images/
├── resize_compress.py

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

  • quality=80 は多くのWeb用途で十分な品質と圧縮率です。
  • より高圧縮を望む場合は、quality=60 などに下げることも検討してください。

まとめ

PythonとPillowを使えば、大量の画像を自動で効率的にリサイズ・圧縮できます。日々の画像管理や、Webサイト高速化にも役立つ便利なテクニックです。