ブログや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サイト高速化にも役立つ便利なテクニックです。