web-dev-qa-db-ja.com

PIL Image.resize()が画像のサイズを変更しない

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という名前のイメージを正しいフォルダーに生成しますが、サイズは変更されません。画像のサイズが120 kbから20 kbに下がりますが、寸法は変わりません。

おそらく、少ないコードで画像を正方形にトリミングする方法を提案することもできます。私はImage.thumbnailがそれを行うと少し思っていましたが、それは私の画像を幅で150ピクセルに拡大し、高さを100ピクセルのままにしたことです。

29
Odif Yltsaeb

resize()は、画像のサイズ変更されたコピーを返します。オリジナルは変更されません。それを使用する正しい方法は次のとおりです。

from PIL import Image
#...

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

ソース

あなたが探しているのはImageOps.fit関数だと思います。 PILから docs

ImageOps.fit(image、size、method、bleed、centering)=>画像

要求されたアスペクト比とサイズにトリミングされた、サイズ変更およびトリミングされた画像のバージョンを返します。 size引数は、(幅、高さ)タプルとして指定された、要求された出力サイズ(ピクセル単位)です。

84
Nadia Alramli