41

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ましたが、画像の幅を150ピクセルに拡大し、高さを100ピクセルにしました。

4

1 に答える 1

108

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

from PIL import Image
#...

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

ソース

あなたが探しているのはImageOps.fit関数だと思います。PILドキュメントから:

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

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

于 2009-08-09T20:39:53.157 に答える