recorrer por matriz manipular manipulacion imagenes imagen descomponer convertir con como python python-imaging-library image-scaling pillow

por - Python/Almohada: Cómo escalar una imagen



manipulacion de imagenes con numpy (2)

Supongamos que tengo una imagen que es 2322px x 4128px. ¿Cómo lo escala para que tanto el ancho como el alto sean menos de 1028px?

No podré usar Image.resize ( https://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.resize ) ya que eso requiere que le dé a ambos el nuevo ancho y altura. Lo que planeo hacer es (pseudo código abajo):

if (image.width or image.height) > 1028: if image.width > image.height: tn_image = image.scale(make width of image 1028) # since the height is less than the width and I am scaling the image # and making the width less than 1028px, the height will surely be # less than 1028px else: #image''s height is greater than it''s width tn_image = image.scale(make height of image 1028)

Supongo que necesito usar Image.thumbnail , pero de acuerdo con este ejemplo ( http://pillow.readthedocs.org/en/latest/reference/Image.html#create-thumbnails ) y esta respuesta ( ¿Cómo puedo cambiar el tamaño de un ¿La imagen utiliza PIL y mantiene su relación de aspecto? ), tanto el ancho como la altura se proporcionan para crear la miniatura. ¿Hay alguna función que tome el nuevo ancho o el nuevo alto (no ambos) y aumente la imagen completa?


No es necesario reinventar la rueda, existe el método Image.thumbnail disponible para esto:

maxsize = (1028, 1028) tn_image = image.thumbnail(maxsize, PIL.Image.ANTIALIAS)

Asegura que el tamaño resultante no sea más grande que los límites dados mientras mantiene la relación de aspecto.

La especificación de PIL.Image.ANTIALIAS aplica un filtro de reducción de resolución de alta calidad para un mejor resultado de cambio de tamaño, probablemente también lo desee.


Usa Image.resize, pero calcula tanto el ancho como el alto.

if image.width > 1028 or image.height > 1028: if image.height > image.width: factor = 1028 / image.height else: factor = 1028 / image.width tn_image = image.resize((int(image.width * factor), int(image.height * factor)))