Webサイトに画像を掲載する際、適切なサイズと容量に最適化することはページの表示速度やユーザー体験に直結します。この記事では、Pythonを使ってフォルダ内のすべての画像を一括でリサイズし、Web向けに軽量化する方法を解説します。
使用ライブラリ:Pillow(PIL)
画像処理には、Pythonの代表的な画像ライブラリ「Pillow(旧PIL)」を使用します。まずはライブラリをインストールしましょう。
pip install pillow
リサイズスクリプトの作成
以下は、指定フォルダ内のすべての画像を幅800pxにリサイズし、JPEG形式で品質80%に圧縮して出力するPythonスクリプトの例です。
import os
from PIL import Image
# 入力フォルダと出力フォルダのパス
input_folder = 'input_images'
output_folder = 'output_images'
# 出力フォルダが存在しなければ作成
os.makedirs(output_folder, exist_ok=True)
# リサイズ後の幅
target_width = 800
# 対象の拡張子
image_extensions = ['.jpg', '.jpeg', '.png']
# フォルダ内のファイルを走査
for filename in os.listdir(input_folder):
name, ext = os.path.splitext(filename)
if ext.lower() in image_extensions:
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, f"{name}.jpg")
with Image.open(input_path) as img:
# アスペクト比を保ったまま幅を800pxにリサイズ
ratio = target_width / img.width
new_size = (target_width, int(img.height * ratio))
resized_img = img.resize(new_size, Image.LANCZOS)
# RGBに変換(PNGの透過を排除)してJPEG保存
resized_img.convert('RGB').save(output_path, format='JPEG', quality=80)
print("画像のリサイズと最適化が完了しました。")
- Image.LANCZOSは高品質なリサンプリング方法で、拡大・縮小時の画質劣化を抑えます。
- すべての画像を.jpg形式で保存することで、PNGよりも軽量なフォーマットに統一できます。
- 出力品質(quality=80)は、見た目とファイルサイズのバランスが良く、Web向けに適しています。
応用:縦横の最大サイズを指定してリサイズ
より汎用的なリサイズとして、縦横の最大サイズを指定する処理も可能です。例えば「縦横どちらかが800pxを超えていたら縮小する」場合は以下のように書けます。
max_size = (800, 800)
resized_img.thumbnail(max_size, Image.LANCZOS)
まとめ
PythonとPillowを使えば、Web用の画像最適化を簡単に自動化できます。手作業で画像を編集する手間が省けるため、ブログやECサイトなど大量の画像を扱う場面で非常に有効です。今後はこのスクリプトに「ファイル名のリネーム処理」や「Exif情報の削除」などを加えることで、さらに実用的な自動化が実現できます。