Pythonで画像をリサイズするには幾つかの方法があります。
今回はPIL(Pillow)のご紹介です。

早速ソースです!
from PIL import Image
# 画像ファイルを読み込む
image = Image.open("example.jpg")
# 画像をリサイズする
resized_image = image.resize((200, 300))
# リサイズした画像を保存する
resized_image.save("resized_example.jpg")
PythonのPIL(Python Imaging Library)パッケージは、画像の処理・編集を手軽に行える便利なライブラリです。
パッケージインストール
PIP
pip install pillow
Conda
conda install -c conda-forge pillow
リサイズの詳細
resizeメソッドは省略可能な第2引数があります。
定数 | 意味合い |
---|---|
Image.NEAREST | 最近傍補間※デフォルト |
Image.BOX | ボックス補間 |
Image.BILINEAR | バイリニア補間 |
Image.HAMMING | ハミング補間 |
Image.BICUBIC | バイキュービック補間 |
Image.LANCZOS | ランチョス補間 |
最近傍補間は最もシンプルな補間アルゴリズムで、処理速度が速いですが、画質は他の補間アルゴリズムに比べて劣ります。元画像の最も近いピクセルの値をそのまま使用するため、拡大時には画像が荒くなりがちです。
ボックス補間は、元画像の矩形領域内の平均値を新しいピクセルの値として使用します。最近傍補間よりも画質が向上しますが、他の高品質な補間アルゴリズムには劣ります。
バイリニア補間は、線形補間を二次元に拡張したもので、周囲4つのピクセルの値から重み付け平均を計算して新しいピクセルの値とします。最近傍補間やボックス補間よりも画質が向上し、処理速度もそこそこ速いため、一般的な用途に適しています。
ハミング補間は、ウィンドウ関数を用いた補間アルゴリズムで、バイリニア補間よりも画質が向上しますが、計算コストがやや高くなります。
バイキュービック補間は、3次のスプライン関数を用いた補間アルゴリズムで、周囲16のピクセルの値から新しいピクセルの値を計算します。高品質な画像が得られるため、画質を重視する場合に適していますが、処理速度は他の補間アルゴリズムに比べて遅くなります。
ランチョス補間は、周囲のピクセルの値をサンプリングしてウィンドウ関数を適用する補間アルゴリズムで、バイキュービック補間より
コツ(アスペクト比を維持)
上記のオプションや、アスペクト比を維持することで画像の品質を高く保てます。
できるだけ比率を変えずに画像を処理してください。



サンプルコード
# リサイズ時にアスペクト比を維持したい場合は、リサイズ後の幅か高さを指定し、
# もう一方を計算してから`resize`メソッドに渡します。
# 元の画像の幅と高さを取得
width, height = image.size
# リサイズ後の幅を指定し、アスペクト比を維持した高さを計算
new_width = 200
new_height = int(height * (new_width / width))
# 画像をリサイズする
resized_image = image.resize((new_width, new_height), resample=Image.BICUBIC)
# リサイズした画像を保存する
resized_image.save("resized_example_aspect_ratio.jpg")
コメント