PIL Image.resize () no redimensiona la imagen

Tengo un problema extraño con PIL no cambiar el tamaño de la imagen.

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') 

Este código se ejecuta sin errores y me produce una imagen llamada mugshotv2.jpg en la carpeta correcta, pero no la mugshotv2.jpg tamaño. Le hace algo, porque el tamaño de la imagen cae de 120 kb a 20 kb, pero las dimensiones siguen siendo las mismas.

Quizás también puedas sugerir una forma de recortar imágenes en cuadrados con menos código. Pensé que la Image.thumbnail hace, pero lo que hizo fue escalar mi imagen a 150 px por su ancho, dejando la altura 100px.

resize() devuelve una copia redimensionada de una imagen. No modifica el original. La forma correcta de usarlo es:

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

fuente

Creo que lo que está buscando es la función ImageOps.fit. De los documentos de PIL:

ImageOps.fit (imagen, tamaño, método, sangrado, centrado) => imagen

Devuelve una versión dimensionada y recortada de la imagen, recortada a la relación de aspecto y tamaño solicitados. El argumento de tamaño es el tamaño de salida solicitado en píxeles, dado como una tupla (ancho, alto).