CodeGym /Corsi /Python SELF IT /GIF e Automazione dell'elaborazione delle immagini

GIF e Automazione dell'elaborazione delle immagini

Python SELF IT
Livello 46 , Lezione 4
Disponibile

1. Automazione dell'elaborazione batch di immagini

L'elaborazione batch delle immagini consente di eseguire le stesse operazioni su un gran numero di file, risparmiando tempo e fatica. Ad esempio, se hai una cartella di immagini da ridimensionare o su cui applicare un watermark, Pillow ti permette di creare uno script che applichi queste operazioni a tutte le immagini.

Ridimensionare tutte le immagini in una cartella

In questo esempio ridimensioniamo tutte le immagini nella cartella input_images e salviamo i risultati nella cartella output_images.


import os
from PIL import Image

input_folder = "input_images/"
output_folder = "output_images/"
new_size = (800, 800)

# Assicuriamoci che la cartella per salvare le immagini esista
os.makedirs(output_folder, exist_ok=True)

# Iteriamo su ogni file nella cartella input_folder
for filename in os.listdir(input_folder):
    if filename.endswith((".jpg", ".jpeg", ".png")):
        image_path = os.path.join(input_folder, filename)
        
        # Apriamo l'immagine e ne cambiamo la dimensione
        with Image.open(image_path) as img:
            resized_img = img.resize(new_size)
            output_path = os.path.join(output_folder, filename)
            
            # Salviamo l'immagine
            resized_img.save(output_path)
            print(f"Immagine {filename} ridimensionata e salvata con successo.")

Questo script:

  1. Carica tutti i file dalla cartella input_images.
  2. Ridimensiona ogni immagine a 800x800 pixel.
  3. Salva le immagini modificate nella cartella output_images.

Aggiungere un watermark sulle immagini

Aggiungere un watermark su tutte le immagini in una cartella può essere facilmente automatizzato. In questo esempio aggiungiamo un watermark testuale nell'angolo in basso a destra di ogni immagine.


from PIL import ImageDraw, ImageFont

input_folder = "input_images/"
output_folder = "watermarked_images/"
watermark_text = "© My Company"

# Assicuriamoci che la cartella per salvare le immagini esista
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)
        
        # Apriamo l'immagine e creiamo un oggetto per il disegno
        with Image.open(image_path) as img:
            draw = ImageDraw.Draw(img)
            width, height = img.size
            font = ImageFont.truetype("arial.ttf", 24)
            
            # Posizione per il watermark
            text_width, text_height = draw.textsize(watermark_text, font=font)
            x = width - text_width - 10
            y = height - text_height - 10
            
            # Aggiungiamo il watermark
            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"Watermark aggiunto all'immagine {filename}.")

Questo script:

  1. Carica tutte le immagini da input_images.
  2. Aggiunge un watermark testuale nell'angolo in basso a destra dell'immagine.
  3. Salva il risultato nella cartella watermarked_images.

Conversione delle immagini al formato PNG

Convertire tutte le immagini in un unico formato è altrettanto semplice da automatizzare. In questo esempio convertiamo tutte le immagini di una cartella nel formato PNG.


input_folder = "input_images/"
output_folder = "png_images/"

# Assicuriamoci che la cartella per salvare le immagini esista
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)
        
        # Apriamo e convertiamo l'immagine in formato 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"Immagine {filename} convertita con successo in PNG.")

Questo script converte immagini nei formati JPEG, BMP e TIFF in PNG, salvandole nella cartella png_images.

2. Lavorare con le animazioni GIF

Le animazioni GIF sono una sequenza di immagini mostrate una dopo l'altra, creando un effetto di movimento. Con Pillow si possono creare e modificare animazioni GIF, aggiungere o cambiare frame, e controllare la velocità dell'animazione.

Creazione di una semplice animazione GIF

Per creare un'animazione GIF, è necessario preparare alcune immagini (frame) che verranno mostrate in sequenza. In questo esempio creiamo un GIF dalle immagini nella cartella frames.


# Lista delle immagini per l'animazione
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)

# Salviamo i frame come animazione GIF
frames[0].save("animation.gif", save_all=True, append_images=frames[1:], duration=100, loop=0)

Questo codice:

  1. Carica immagini dalla cartella frames e le aggiunge alla lista frames.
  2. Crea un'animazione GIF da questi frame.
  3. Il parametro duration=100 specifica la durata di ogni frame in millisecondi, e loop=0 imposta una riproduzione infinita.

Modifica della velocità di animazione GIF

Per modificare la velocità dell'animazione, basta cambiare il valore del parametro duration.


# Creazione di un'animazione con velocità aumentata
frames[0].save("fast_animation.gif", save_all=True, append_images=frames[1:], duration=50, loop=0)

In questo esempio duration=50, rendendo la riproduzione del GIF due volte più veloce.

Aggiunta di nuovi frame a un GIF esistente

Puoi anche aprire un GIF esistente, aggiungere nuovi frame e salvare l'animazione aggiornata.


# Apertura di un GIF esistente
with Image.open("existing_animation.gif") as gif:
    frames = [frame.copy() for frame in ImageSequence.Iterator(gif)]

# Aggiunta di un nuovo frame
new_frame = Image.open("new_frame.png")
frames.append(new_frame)

# Salvataggio dell'animazione aggiornata
frames[0].save("updated_animation.gif", save_all=True, append_images=frames[1:], duration=100, loop=0)

Questo codice aggiunge un nuovo frame new_frame.png alla fine dell'animazione.

Estrazione dei frame da un'animazione GIF

Può essere utile dividere un'animazione GIF in singoli frame. Pillow permette di estrarre ogni frame e salvarlo separatamente.


from PIL import ImageSequence

# Apertura di una GIF e estrazione dei frame
with Image.open("animation.gif") as gif:
    for i, frame in enumerate(ImageSequence.Iterator(gif)):
        frame.save(f"frame_{i}.png")

Questo codice salva ogni frame dell'animazione come immagine PNG separata.

Esempio completo di lavoro con GIF e automazione batch

Infine, ecco un esempio in cui si combinano l'automazione batch e la gestione delle GIF. Creiamo un'animazione da tutte le immagini in una cartella, ridimensionando ogni frame prima di aggiungerlo.


# Caricare immagini, ridimensionarle e creare un GIF
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
Опрос
Operazioni complesse con le immagini,  46 уровень,  4 лекция
недоступен
Operazioni complesse con le immagini
Operazioni complesse con le immagini
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION