Cambiar el tamaño de la imagen manteniendo su relación de aspecto en Python

Abid Ullah 21 junio 2023
  1. Cambiar el tamaño de la imagen manteniendo su relación de aspecto en Python
  2. Recortar imagen manteniendo su relación de aspecto en Python
Cambiar el tamaño de la imagen manteniendo su relación de aspecto en Python

El propósito de este artículo de Python es explicar cómo podemos cambiar el tamaño de una imagen en Python manteniendo su relación de aspecto. El método para cambiar el tamaño de una imagen en Python también describirá su uso con un programa de ejemplo adecuado.

Cambiar el tamaño de la imagen manteniendo su relación de aspecto en Python

En Python, puede cambiar el tamaño de una imagen con la ayuda de algunos paquetes predefinidos. Al importar esos paquetes y usar funciones y métodos importantes, puede cambiar el tamaño de una imagen en Python sin perder su relación de aspecto.

Utilice la biblioteca de imágenes de Python (PIL)

La biblioteca de imágenes de Python, PIL, es una biblioteca de Python para imágenes.

El propósito de un script es automatizar tareas orientadas al sistema. Scripting es cuando escribe código para tareas prácticas sin necesidad de compilarlo.

Además de sus poderosas capacidades de procesamiento de imágenes, PIL es capaz de manejar una amplia variedad de formatos de imagen (incluidos BMP, DIB, EPS, GIF, ICO, IM, MSP, PCX, PNG, PPM, SGI, TGA, TIFF, WebP, XBM) y modos de imagen como RGB, RGBA, B&W y monocromo.

Además, PIL es compatible con la mayoría de los sistemas operativos, incluidos Windows, Linux y macOS.

La biblioteca GUI estándar para Python es Tkinter. Cuando Python se combina con Tkinter, las aplicaciones GUI se pueden crear rápida y fácilmente.

Con Tkinter, puede interactuar con el conjunto de herramientas Tk GUI de forma orientada a objetos. También importamos el PIL de Tkinter.

Supongamos que se ha elegido una imagen. El tamaño y la imagen original son los siguientes.

Imagen original que queremos redimensionar

Código de ejemplo:

# First, we have to import the modules here
from tkinter import *
from PIL import Image, ImageTk

# Now we are creating the object
root = Tk()
# Here, just reading the Image
image = Image.open("koala.png")
# Here now, using resize() method, resizing the image
resize_originalimage = image.resize((140, 80))
img_1 = ImageTk.PhotoImage(orgnlimg)
# creating, add resize image, and labeling it
label1 = Label(image=img_1)
label1.image = img_1
label1.pack()
# finally, executing the Tkinter
root.mainloop()

Producción:

Cambiar el tamaño de la salida de la imagen

Ya sea que una imagen se muestre en una pantalla o se almacene en un archivo de imagen, se representa mediante píxeles discretos. Se produce un efecto de alias cuando los datos de la imagen no tienen la misma resolución que la representación de la pantalla.

El submuestreo reduce el alias suavizando los datos y luego submuestreando los datos suavizados. En este caso se utiliza ANTIALIAS.

Resampling.LANCZOS es un método de interpolación de datos muestreados para producir nuevos valores. El método se usa comúnmente en la interpolación multivariante, como cambiar el tamaño de las imágenes digitales.

El tamaño de la imagen original es 284 x 606, y también podremos distinguir la diferencia entre la imagen original y la imagen redimensionada una vez que se ejecute el código.

Código de ejemplo:

# Python Code to resize an image while maintaining the original aspect ratio, using the PIL Methods
import PIL
from PIL import Image

# setting the size of resized image
Imagewidth = 80
Imageheight = 100
img_2 = Image.open("bear.jpg")
wpercent = Imagewidth / float(img_2.size[0])
hsize = int((float(img_2.size[1]) * float(wpercent)))
# img = img.resize((mywidth,hsize), PIL.Image.ANTIALIAS)
img_2 = img_2.resize((Imagewidth, Imageheight), PIL.Image.Resampling.LANCZOS)
img_2.save("resizedImage.jpg")
img_2.show()

La siguiente es la imagen original.

Tamaño original de la imagen

Producción:

La salida de la imagen redimensionada

Cuando ejecutamos el código, también puede ver la imagen redimensionada, que se guardó en el directorio con el nombre resizedImage.jpg.

Recortar imagen manteniendo su relación de aspecto en Python

El siguiente es el método de cambio de tamaño y nuevo tamaño utilizado desde PIL, recortando la imagen en lugar de cambiar su tamaño.

Código de ejemplo:

# Importing Image class from PIL module by maintaining its aspect ratio
from PIL import Image

# Opens an image in RGB mode
# For the external path, we use this :
# img_3 = Image.open(r"Image Path of the Original Image")
# For internal path
img_3 = Image.open("cat.png")
# The size of the image in pixels (size of the original image)
# (This is not mandatory)
width, height = img_3.size
# Setting the cropped image points
left = 4
top = height / 5
right = 154
bottom = 3 * height / 5
# Cropped image of the above dimension
# (It will not change the original image)
img_3 = img_3.crop((left, top, right, bottom))
newsize = (300, 300)
img_3 = img_3.resize(newsize)
# img_3=img_3.save(newsize)
# Shows the image in the image viewer
img_3.show()

La siguiente es la imagen original.

Tamaño original de la imagen

Producción:

La salida de la imagen del gato recortada

Dado que vemos la imagen recortada como una salida del código, podemos suponer que PIL no es solo para cambiar el tamaño de una imagen manteniendo su relación de aspecto, sino también para recortar.

Con Python, usamos Image.open para cambiar el tamaño y leer una imagen usando PIL y mantener su relación de aspecto. Después de calcular el nuevo ancho y alto, cambiamos el tamaño de la imagen usando el método de cambio de tamaño y guardamos la nueva imagen usando el mismo método de acuerdo con el nuevo ancho.

Esperamos que este artículo le resulte útil para comprender cómo cambiar el tamaño de una imagen en Python.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

Artículo relacionado - Python Image