1. Automatisierung der Batch-Bildbearbeitung
Die Batch-Bildbearbeitung ermöglicht es, dieselben Aktionen auf eine große Anzahl von Dateien anzuwenden, was Zeit und Mühe spart. Wenn du z. B. ein Verzeichnis mit Bildern hast, deren Größe du ändern oder ein Wasserzeichen hinzufügen möchtest, kannst du mit Pillow ein Skript erstellen, das die Operationen auf alle Bilder anwendet.
Größe aller Bilder in einem Ordner ändern
In diesem Beispiel ändern wir die Größe aller Bilder im Ordner input_images
und speichern die Ergebnisse im Ordner output_images
.
import os
from PIL import Image
input_folder = "input_images/"
output_folder = "output_images/"
new_size = (800, 800)
# Sicherstellen, dass der Ausgabeordner existiert
os.makedirs(output_folder, exist_ok=True)
# Durchlaufe alle Dateien im Ordner input_folder
for filename in os.listdir(input_folder):
if filename.endswith((".jpg", ".jpeg", ".png")):
image_path = os.path.join(input_folder, filename)
# Öffne das Bild und ändere seine Größe
with Image.open(image_path) as img:
resized_img = img.resize(new_size)
output_path = os.path.join(output_folder, filename)
# Speichere das Bild
resized_img.save(output_path)
print(f"Bild {filename} erfolgreich geändert und gespeichert.")
Dieses Skript:
- Lädt alle Dateien aus dem Ordner
input_images
. - Ändert die Größe jedes Bildes auf 800x800 Pixel.
- Speichert die geänderten Bilder im Ordner
output_images
.
Wasserzeichen auf Bilder anwenden
Das Hinzufügen eines Wasserzeichens zu allen Bildern in einem Ordner kann leicht automatisiert werden. In diesem Beispiel wird ein Textwasserzeichen in die untere rechte Ecke jedes Bildes eingefügt.
from PIL import ImageDraw, ImageFont
input_folder = "input_images/"
output_folder = "watermarked_images/"
watermark_text = "© My Company"
# Sicherstellen, dass der Ausgabeordner existiert
os.makedirs(output_folder, exist_ok=True)
for filename in os.listdir(input_folder):
if filename.endswith((".jpg", ".jpeg", ".png")):
image_path = os.path.join(input_folder, filename)
# Öffne das Bild und erstelle ein Zeichnungsobjekt
with Image.open(image_path) as img:
draw = ImageDraw.Draw(img)
width, height = img.size
font = ImageFont.truetype("arial.ttf", 24)
# Position für das Wasserzeichen
text_width, text_height = draw.textsize(watermark_text, font=font)
x = width - text_width - 10
y = height - text_height - 10
# Wasserzeichen hinzufügen
draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, 128))
output_path = os.path.join(output_folder, filename)
img.save(output_path)
print(f"Wasserzeichen wurde auf das Bild {filename} angewendet.")
Dieses Skript:
- Lädt alle Bilder aus
input_images
. - Fügt ein Textwasserzeichen in die untere rechte Ecke des Bildes ein.
- Speichert das Ergebnis in
watermarked_images
.
Bilder in das PNG-Format konvertieren
Die Konvertierung aller Bilder in ein Format kann ebenfalls leicht automatisiert werden. In diesem Beispiel konvertieren wir alle Bilder im Ordner in das PNG-Format.
input_folder = "input_images/"
output_folder = "png_images/"
# Sicherstellen, dass der Ausgabeordner existiert
os.makedirs(output_folder, exist_ok=True)
for filename in os.listdir(input_folder):
if filename.endswith((".jpg", ".jpeg", ".bmp", ".tiff")):
image_path = os.path.join(input_folder, filename)
# Öffne das Bild und konvertiere es in PNG
with Image.open(image_path) as img:
base_filename = os.path.splitext(filename)[0]
output_path = os.path.join(output_folder, f"{base_filename}.png")
img.save(output_path, "PNG")
print(f"Bild {filename} erfolgreich in PNG konvertiert.")
Dieses Skript konvertiert Bilder aus den Formaten JPEG, BMP und TIFF in PNG und speichert sie im Ordner png_images
.
2. Arbeiten mit GIF-Animationen
GIF-Animationen sind eine Abfolge von Bildern, die nacheinander angezeigt werden, um einen Bewegungseffekt zu erzeugen. Mit Pillow kannst du GIF-Animationen erstellen und bearbeiten, Frames hinzufügen und ändern sowie die Geschwindigkeit der Animation steuern.
Erstellung einer einfachen GIF-Animation
Um eine GIF-Animation zu erstellen, müssen mehrere Bilder (Frames) vorbereitet werden, die nacheinander angezeigt werden. In diesem Beispiel erstellen wir ein GIF aus Bildern im Ordner frames
.
# Liste der Bilder für die Animation
frames_folder = "frames/"
frames = []
for filename in sorted(os.listdir(frames_folder)):
if filename.endswith((".png", ".jpg")):
frame_path = os.path.join(frames_folder, filename)
frame = Image.open(frame_path)
frames.append(frame)
# Speichere die Frames in eine GIF-Animation
frames[0].save("animation.gif", save_all=True, append_images=frames[1:], duration=100, loop=0)
Dieser Code:
- Lädt Bilder aus dem Ordner
frames
und fügt sie der Listeframes
hinzu. - Erstellt eine GIF-Animation aus diesen Frames.
- Der Parameter
duration=100
gibt die Anzeigedauer jedes Frames in Millisekunden an, undloop=0
legt eine Endlosschleife fest.
Änderung der Geschwindigkeit einer GIF-Animation
Um die Geschwindigkeit der Animation zu ändern, ändere einfach den Wert des Parameters duration
.
# Erstellung einer Animation mit erhöhter Geschwindigkeit
frames[0].save("fast_animation.gif", save_all=True, append_images=frames[1:], duration=50, loop=0)
In diesem Beispiel ist duration=50
, was die Wiedergabe des GIFs um das Zweifache beschleunigt.
Hinzufügen neuer Frames zu einem bestehenden GIF
Du kannst auch ein bestehendes GIF öffnen, neue Frames hinzufügen und die aktualisierte Animation speichern.
# Öffne ein bestehendes GIF
with Image.open("existing_animation.gif") as gif:
frames = [frame.copy() for frame in ImageSequence.Iterator(gif)]
# Neuen Frame hinzufügen
new_frame = Image.open("new_frame.png")
frames.append(new_frame)
# Speichere die aktualisierte Animation
frames[0].save("updated_animation.gif", save_all=True, append_images=frames[1:], duration=100, loop=0)
Dieser Code fügt den neuen Frame new_frame.png
am Ende der Animation hinzu.
Extrahieren von Frames aus einer GIF-Animation
Manchmal musst du ein GIF in einzelne Frames aufteilen. Pillow ermöglicht es, jeden Frame zu extrahieren und separat zu speichern.
from PIL import ImageSequence
# Öffne die GIF-Animation und extrahiere Frames
with Image.open("animation.gif") as gif:
for i, frame in enumerate(ImageSequence.Iterator(gif)):
frame.save(f"frame_{i}.png")
Dieser Code speichert jeden Frame der Animation als separates PNG-Bild.
Beispiel für die vollständige Arbeit mit GIF-Animation und Batch-Bildbearbeitung
Zum Abschluss geben wir ein Beispiel, in dem die Automatisierung der Batch-Bildbearbeitung und die Arbeit mit GIF kombiniert werden. Wir erstellen eine Animation aus allen Bildern in einem Ordner, wobei die Größe jedes Frames vor dem Hinzufügen geändert wird.
# Bilder laden, deren Größe ändern und ein GIF erstellen
input_folder = "input_images/"
frames = []
new_size = (400, 400)
for filename in sorted(os.listdir(input_folder)):
if filename.endswith((".jpg", ".jpeg", ".png")):
image_path = os.path.join(input_folder, filename)
with Image.open(image_path) as img:
resized_frame = img.resize(new_size)
frames.append(resized_frame)
GO TO FULL VERSION