1. ホーム
  2. python

[解決済み] PIL Image.resize()で画像のサイズが変更されない

2022-03-03 15:44:05

質問

PILが画像のリサイズを行わないという不思議な問題があります。

from PIL import Image
img = Image.open('foo.jpg')

width, height = img.size
ratio = floor(height / width)
newheight = ratio * 150

img.resize((150, newheight), Image.ANTIALIAS)

img.save('mugshotv2.jpg', format='JPEG')

このコードは何のエラーもなく実行され、次のような名前の画像が生成されます。 mugshotv2.jpg を正しいフォルダに保存していますが、リサイズはしていません。画像のサイズは120kbから20kbに低下しますが、寸法は同じままなので、何かしています。

また、より少ないコードで画像を正方形に切り取る方法を提案してください。私がちょっと思ったのは Image.thumbnail しかし、それは私の画像を幅150pxに拡大し、高さ100pxを残すというものでした。

解決方法は?

resize() は、画像のリサイズコピーを返します。元の画像は変更されません。正しい使い方は

from PIL import Image
#...

img = img.resize((150, newheight), Image.ANTIALIAS)

ソース

お探しのものは、ImageOps.fitの機能だと思います。PILより ドキュメント :

ImageOps.fit(image, size, method, bleed, centering) => image

をサイズ調整してトリミングしたものを返します。 画像は、要求されたサイズに切り取られます。 アスペクト比とサイズを指定します。サイズ 引数は要求された出力サイズ ピクセル単位で、(幅、高さ)として与えられる。 タプルです。