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.
# 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
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()
.
# 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.
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.
GO TO FULL VERSION