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ピクセルのままにしたことです。
resize()
は、画像のサイズ変更されたコピーを返します。オリジナルは変更されません。それを使用する正しい方法は次のとおりです。
from PIL import Image
#...
img = img.resize((150, newheight), Image.ANTIALIAS)
あなたが探しているのはImageOps.fit関数だと思います。 PILから docs :
ImageOps.fit(image、size、method、bleed、centering)=>画像
要求されたアスペクト比とサイズにトリミングされた、サイズ変更およびトリミングされた画像のバージョンを返します。 size引数は、(幅、高さ)タプルとして指定された、要求された出力サイズ(ピクセル単位)です。