pil - resize image python numpy
PIL Image.resize() no redimensiona la imagen (1)
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 una altura de 100 px.
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)
Creo que lo que está buscando es la función ImageOps.fit. De los docs 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).