
みなさん、こんにちは。日々のプログラミングライフはいかがお過ごしでしょうか。
今回は、Pythonで画像処理を行う際のデファクトスタンダードである「Pillow(PIL)」をご紹介します。画像の自動リサイズやフォーマット変換など、一度スクリプトを組んでしまえば日々の作業効率が劇的に向上します。基礎から実践的なコードまで、丁寧に解説していきますね。
Pillowとは
Pillowは、かつて広く使われていた画像処理ライブラリ「PIL(Python Imaging Library)」からフォークされ、現代のPython環境に合わせて活発にメンテナンスされているオープンソースライブラリです。JPEG、PNG、GIF、WebPなど多彩な画像フォーマットに対応しており、読み込み・加工・保存といった一連の処理を直感的なコードで記述できます。
Pillowのメリット
Pillowの主なメリットは以下の3点です。
- シンプルなAPI体系:オブジェクト指向に基づいた直感的なメソッドが用意されており、数行のコードで画像の加工が完了します。
- 豊富な画像フォーマットへの対応:主要な拡張子の相互変換が容易で、Web用画像の最適化などにも適しています。
- 軽量かつ高速:NumPyやOpenCVのような高度な解析処理を必要としない、日常的な画像編集であれば十分以上のパフォーマンスを発揮します。
Webサイト制作で大量の画像を一定のサイズや拡張子に統一したいとき、Pillowの自動化スクリプトが本当に大活躍してくれますよ。
サンプルコード
まずは環境構築です。ターミナルで以下のコマンドを実行してインストールしてください。
pip install pillow続いて、画像の読み込み、リサイズ、回転、フィルタ適用、モノクロ変換を行い、別形式で保存する一連の流れです。
from PIL import Image, ImageFilter
# 1. 画像の読み込み
image_path = "input.jpg"
with Image.open(image_path) as img:
print(f"オリジナルサイズ: {img.size}, カラーモード: {img.mode}")
# 2. アスペクト比を維持してリサイズ(サムネイル作成)
img.thumbnail((400, 400))
# 3. 画像の回転(反時計回りに90度)
rotated_img = img.rotate(90, expand=True)
# 4. 輪郭強調フィルタの適用
filtered_img = rotated_img.filter(ImageFilter.EDGE_ENHANCE)
# 5. グレースケール(白黒)へ変換
gray_img = filtered_img.convert("L")
# 6. 保存(WebP形式で高品質に保存)
gray_img.save("output.webp", "WEBP", quality=90)
print("処理が正常に完了しました。")画像を開く際は `with Image.open(…)` を使うと、安全にファイルを閉じてくれるのでメモリリークを防ぐことができます。

オリジナルサイズ: (1448, 1086), カラーモード: RGB
処理が正常に完了しました。
みーちゃんのワンポイント
インストール時のパッケージ名は「pillow」ですが、コード内でインポートする際は歴史的経緯から「from PIL import Image」と記述する必要がある点に注意してください。また、リサイズ時に「img.resize()」を使うとアスペクト比が崩れやすいため、比率を維持したい場合は「img.thumbnail()」を活用するのが綺麗に仕上げるコツです。
