Das kannst du mitr dem Modul PIL (Pillow).
pip install pillow
In diesem Beispiel wird die Funktion resize_and_crop definiert, die das Eingabebild so anpasst, dass es in das gewünschte Seitenverhältnis passt. Dabei wird das Bild auf die gewünschte Zielgröße skaliert und dann zentriert zugeschnitten.
from PIL import Image
def resize_and_crop(input_path, output_path, target_size):
img = Image.open(input_path)
# Berechnung der Seitenverhältnisse
original_width, original_height = img.size
target_width, target_height = target_size
aspect_ratio = original_width / original_height
target_aspect_ratio = target_width / target_height
if aspect_ratio > target_aspect_ratio:
new_width = int(target_height * aspect_ratio)
new_height = target_height
else:
new_width = target_width
new_height = int(target_width / aspect_ratio)
img_resized = img.resize((new_width, new_height), Image.ANTIALIAS)
# Zentriert zuschneiden
left = (new_width - target_width) / 2
top = (new_height - target_height) / 2
right = (new_width + target_width) / 2
bottom = (new_height + target_height) / 2
img_cropped = img_resized.crop((left, top, right, bottom))
img_cropped.save(output_path)
# Beispielaufruf
input_image = "input.jpg"
output_image = "output.jpg"
target_size = (300, 200) # Zielgröße (Breite, Höhe)
resize_and_crop(input_image, output_image, target_size)