Ändern Sie die Bildgröße unter Beibehaltung des Seitenverhältnisses in Python

Abid Ullah 21 Juni 2023
  1. Ändern Sie die Bildgröße unter Beibehaltung des Seitenverhältnisses in Python
  2. Bild zuschneiden, indem das Seitenverhältnis in Python beibehalten wird
Ändern Sie die Bildgröße unter Beibehaltung des Seitenverhältnisses in Python

Der Zweck dieses Python-Artikels besteht darin, zu erklären, wie wir die Größe eines Bildes in Python ändern können, während wir das Seitenverhältnis beibehalten. Die Methode zum Ändern der Größe eines Bildes in Python wird auch seine Verwendung mit einem geeigneten Beispielprogramm beschreiben.

Ändern Sie die Bildgröße unter Beibehaltung des Seitenverhältnisses in Python

In Python können Sie die Größe eines Bildes mit Hilfe einiger vordefinierter Pakete ändern. Indem Sie diese Pakete importieren und wichtige Funktionen und Methoden verwenden, können Sie die Größe eines Bildes in Python ändern, ohne das Seitenverhältnis zu verlieren.

Python Imaging Library (PIL) verwenden

Die Imaging-Bibliothek von Python, PIL, ist eine Python-Bibliothek für Imaging.

Der Zweck eines Skripts besteht darin, systemorientierte Aufgaben zu automatisieren. Beim Skripting schreiben Sie Code für praktische Aufgaben, ohne ihn kompilieren zu müssen.

Zusätzlich zu seinen leistungsstarken Bildverarbeitungsfunktionen ist PIL in der Lage, eine Vielzahl von Bildformaten zu verarbeiten (einschließlich BMP, DIB, EPS, GIF, ICO, IM, MSP, PCX, PNG, PPM, SGI, TGA, TIFF, WebP, XBM) und Bildmodi wie RGB, RGBA, B&W und Monochrom.

Zudem ist PIL mit den meisten Betriebssystemen kompatibel, einschliesslich Windows, Linux und macOS.

Die Standard-GUI-Bibliothek für Python ist Tkinter. Wenn Python mit Tkinter kombiniert wird, können GUI-Anwendungen schnell und einfach erstellt werden.

Mit Tkinter können Sie objektorientiert mit dem Tk GUI-Toolkit interagieren. Wir importieren auch die PIL von Tkinter.

Angenommen, ein Bild wurde ausgewählt. Die Größe und das Originalbild sind wie folgt.

Originalbild, dessen Größe wir ändern möchten

Beispielcode:

# 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()

Ausgang:

Größe der Bildausgabe ändern

Unabhängig davon, ob ein Bild auf einem Bildschirm angezeigt oder in einer Bilddatei gespeichert wird, wird es durch diskrete Pixel dargestellt. Ein Aliasing-Effekt tritt auf, wenn die Bilddaten nicht die gleiche Auflösung wie die Bildschirmdarstellung haben.

Subsampling reduziert Aliasing durch Glätten der Daten und anschließendes Subsampling der geglätteten Daten. In diesem Fall wird ANTIALIAS verwendet.

Resampling.LANCZOS ist eine Methode zum Interpolieren abgetasteter Daten, um neue Werte zu erzeugen. Das Verfahren wird üblicherweise bei der multivariaten Interpolation verwendet, wie z. B. beim Ändern der Größe digitaler Bilder.

Die ursprüngliche Bildgröße beträgt 284 x 606, und wir können auch den Unterschied zwischen dem Originalbild und dem in der Größe geänderten Bild erkennen, sobald der Code ausgeführt wird.

Beispielcode:

# 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()

Das folgende ist das ursprüngliche Bild.

Originalgröße des Bildes

Ausgang:

Die Ausgabe des Bildes wurde in der Größe geändert

Wenn wir den Code ausführen, sehen Sie auch das verkleinerte Bild, das im Verzeichnis mit dem Namen resizedImage.jpg gespeichert wurde.

Bild zuschneiden, indem das Seitenverhältnis in Python beibehalten wird

Das Folgende ist die von PIL verwendete Methode zur Größenänderung und neuen Größe, bei der das Bild beschnitten wird, anstatt die Größe zu ändern.

Beispielcode:

# 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()

Das folgende ist das ursprüngliche Bild.

Originalgröße des Bildes

Ausgang:

Die Ausgabe des zugeschnittenen Katzenbildes

Da wir das beschnittene Bild als Ausgabe des Codes sehen, können wir davon ausgehen, dass PIL nicht nur zum Ändern der Größe eines Bildes unter Beibehaltung des Seitenverhältnisses dient, sondern auch zum Beschneiden.

Mit Python haben wir Image.open verwendet, um die Größe eines Bildes mit PIL zu ändern und zu lesen und sein Seitenverhältnis beizubehalten. Nach der Berechnung der neuen Breite und Höhe haben wir die Größe des Bildes mit der Größenänderungsmethode geändert und das neue Bild mit der gleichen Methode entsprechend der neuen Breite gespeichert.

Wir hoffen, dass Sie diesen Artikel hilfreich finden, um zu verstehen, wie Sie die Größe eines Bildes in Python ändern.

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

Verwandter Artikel - Python Image