CodeGym /Corsi /Python SELF IT /Lavorare con i metadati

Lavorare con i metadati

Python SELF IT
Livello 46 , Lezione 3
Disponibile

1. Lavorare con i metadati EXIF

I metadati EXIF memorizzano informazioni sulle caratteristiche delle immagini, come i parametri di scatto (ISO, esposizione, apertura), la data di creazione, l'orientamento e persino le coordinate del luogo di scatto. I dati EXIF possono essere estratti e utilizzati per l'analisi delle immagini o per l'automazione della loro elaborazione.

Estrazione dei dati EXIF

I dati EXIF possono essere estratti utilizzando l'attributo info o getexif(). Il metodo getexif() fornisce accesso a un set completo di dati EXIF, se presenti nell'immagine.

Python

# Estrazione dei dati EXIF
exif_data = image._getexif()

# Controllo della presenza degli EXIF
if exif_data is not None:
    for tag_id, value in exif_data.items():
        tag = Image.ExifTags.TAGS.get(tag_id, tag_id)
        print(f"{tag}: {value}")
else:
    print("Dati EXIF non trovati.")

In questo codice Image.ExifTags.TAGS viene utilizzato per decodificare gli identificatori dei tag EXIF in nomi leggibili come "DateTime", "ExposureTime", "ISOSpeedRatings", ecc. Se l'immagine non contiene dati EXIF, la funzione stamperà semplicemente un messaggio a riguardo.

2. Estrazione di metadati chiave

I metadati EXIF spesso includono parametri di scatto come risoluzione, orientamento e geolocalizzazione. Vediamo come ottenere alcuni di questi valori, se presenti nei dati EXIF.

Estrazione della data e ora dello scatto, risoluzione e orientamento

Python

from PIL.ExifTags import TAGS

# Controllo della presenza dei dati EXIF
if exif_data is not None:
    # Inizializzare variabili per memorizzare i valori
    date_time = None
    orientation = None
    resolution = None

    for tag_id, value in exif_data.items():
        tag = TAGS.get(tag_id, tag_id)

        # Estrazione dei dati dai tag
        if tag == "DateTime":
            date_time = value
        elif tag == "Orientation":
            orientation = value
        elif tag == "XResolution" or tag == "YResolution":
            resolution = value

    print("Data e ora dello scatto:", date_time)
    print("Orientamento:", orientation)
    print("Risoluzione:", resolution)
else:
    print("Dati EXIF non trovati.")

In questo esempio vengono estratti i valori per DateTime (data e ora dello scatto), Orientation (orientamento dell'immagine) e XResolution/YResolution (risoluzione dell'immagine). Tali dati sono spesso utili per ordinare le foto o creare report.

3. Aggiunta e modifica dei metadati EXIF

Sebbene Pillow supporti in modo limitato l'aggiunta di dati EXIF, è possibile mantenere i metadati durante la conversione delle immagini, se sono già presenti nell'immagine originale.

Esempio: Mantenimento dei metadati durante la conversione

Per mantenere i dati EXIF durante il salvataggio di un'immagine, usa il parametro exif quando richiami il metodo save().

Python

# Controllo della presenza degli EXIF e salvataggio con metadati
if exif_data is not None:
    exif_bytes = image.info['exif']
    image.save("converted_with_exif.jpg", exif=exif_bytes)
else:
    print("Dati EXIF assenti.")

Questo codice mantiene i dati EXIF durante la conversione di un'immagine in un altro formato, consentendo di mantenere i parametri di scatto originali.

4. Esempi:

Esempio completo di lavoro con formati e metadati EXIF

Infine, vediamo un esempio che converte un'immagine, la ottimizza e mantiene i dati EXIF.

Python

from PIL import Image, ExifTags

# Apertura dell'immagine
image = Image.open("original.jpg")

# Controllo della presenza dei dati EXIF
exif_data = image._getexif()
if exif_data:
    exif_bytes = image.info['exif']  # Conservare i dati EXIF per utilizzo futuro
else:
    print("Dati EXIF assenti.")

# Conversione dell'immagine in PNG e ottimizzazione
image_png = image.convert("RGB")
image_png.save("optimized_image.png", optimize=True)

# Conversione in JPEG mantenendo i dati EXIF e riducendo la qualità
if exif_data:
    image.save("compressed_with_exif.jpg", quality=85, exif=exif_bytes)
else:
    image.save("compressed_without_exif.jpg", quality=85)

Questo codice include:

  • Conversione dell'immagine in formato PNG con ottimizzazione.
  • Conversione in formato JPEG con riduzione della qualità per ottimizzare le dimensioni.
  • Mantenimento dei dati EXIF durante la conversione, se presenti.

Applicazioni pratiche della gestione di formati e metadati EXIF

  • Ottimizzazione delle immagini per il web: La conversione delle immagini in formati ottimizzati come JPEG e PNG riduce le dimensioni del file e accelera il caricamento delle pagine.
  • Estrazione di dati per i report: I metadati EXIF contengono informazioni sui parametri di scatto, che possono essere utili per l'analisi delle foto e la creazione di report.
  • Mantenimento dei metadati durante la modifica: Durante l'editing delle immagini, è possibile mantenere i parametri di scatto originali, utili per l'archiviazione e la documentazione.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION