CodeGym /Java Kurs /Python SELF DE /GIF und Automatisierung der Bildbearbeitung

GIF und Automatisierung der Bildbearbeitung

Python SELF DE
Level 46 , Lektion 4
Verfügbar

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:

  1. Lädt alle Dateien aus dem Ordner input_images.
  2. Ändert die Größe jedes Bildes auf 800x800 Pixel.
  3. 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:

  1. Lädt alle Bilder aus input_images.
  2. Fügt ein Textwasserzeichen in die untere rechte Ecke des Bildes ein.
  3. 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:

  1. Lädt Bilder aus dem Ordner frames und fügt sie der Liste frames hinzu.
  2. Erstellt eine GIF-Animation aus diesen Frames.
  3. Der Parameter duration=100 gibt die Anzeigedauer jedes Frames in Millisekunden an, und loop=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)
1
Опрос
Komplexe Bildoperationen,  46 уровень,  4 лекция
недоступен
Komplexe Bildoperationen
Komplexe Bildoperationen
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION