1. Praca z metadanymi EXIF
Metadane EXIF przechowują informacje o właściwościach obrazu, takich jak parametry robienia zdjęć (ISO, czas naświetlania, przysłona), data utworzenia, orientacja, a nawet współrzędne miejsca wykonania zdjęcia. Dane EXIF można wydobyć i użyć do analizy obrazów lub automatyzacji ich przetwarzania.
Wydobywanie danych EXIF
Metadane EXIF można wydobyć za pomocą atrybutu info
lub getexif()
. Metoda getexif()
daje dostęp do pełnego zestawu danych EXIF, jeśli są one obecne w obrazie.
# Wydobywanie danych EXIF
exif_data = image._getexif()
# Sprawdzenie obecności danych 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("Dane EXIF nie zostały znalezione.")
W tym kodzie Image.ExifTags.TAGS
jest używany do dekodowania identyfikatorów tagów EXIF na czytelne nazwy, takie jak "DateTime"
, "ExposureTime"
, "ISOSpeedRatings"
, itp. Jeśli obraz nie zawiera danych EXIF, funkcja po prostu wyświetli o tym komunikat.
2. Wydobywanie kluczowych metadanych
Metadane EXIF często zawierają parametry zdjęcia, takie jak rozdzielczość, orientacja i geolokalizacja. Przyjrzyjmy się, jak uzyskać niektóre z tych wartości, jeśli są obecne w danych EXIF.
Wydobywanie daty i godziny wykonania, rozdzielczości i orientacji
from PIL.ExifTags import TAGS
# Sprawdzenie obecności danych EXIF
if exif_data is not None:
# Inicjalizacja zmiennych do przechowywania wartości
date_time = None
orientation = None
resolution = None
for tag_id, value in exif_data.items():
tag = TAGS.get(tag_id, tag_id)
# Wydobywanie danych na podstawie tagów
if tag == "DateTime":
date_time = value
elif tag == "Orientation":
orientation = value
elif tag == "XResolution" or tag == "YResolution":
resolution = value
print("Data i godzina wykonania:", date_time)
print("Orientacja:", orientation)
print("Rozdzielczość:", resolution)
else:
print("Dane EXIF nie zostały znalezione.")
W tym przykładzie wydobywane są wartości dla DateTime
(data i godzina wykonania), Orientation
(orientacja obrazu) i XResolution
/YResolution
(rozdzielczość obrazu). Takie dane często są przydatne przy sortowaniu zdjęć lub tworzeniu raportów.
3. Dodawanie i edytowanie metadanych EXIF
Chociaż Pillow ogranicza wsparcie dla dodawania danych EXIF, można zachować metadane podczas konwersji obrazów, jeśli są one już obecne w oryginalnym obrazie.
Przykład: Zachowanie metadanych podczas konwersji
Aby zachować dane EXIF podczas zapisywania obrazu, użyj parametru exif
przy wywoływaniu metody save()
.
# Sprawdzenie obecności EXIF i zapis z metadanymi
if exif_data is not None:
exif_bytes = image.info['exif']
image.save("converted_with_exif.jpg", exif=exif_bytes)
else:
print("Dane EXIF są nieobecne.")
Ten kod zachowuje dane EXIF przy konwersji obrazu na inny format, co pozwala zachować oryginalne parametry wykonania zdjęcia.
4. Przykłady:
Pełny przykład pracy z formatami i metadanymi EXIF
Na zakończenie, spójrzmy na przykład, który konwertuje obraz, optymalizuje go i zachowuje dane EXIF.
from PIL import Image, ExifTags
# Otwarcie obrazu
image = Image.open("original.jpg")
# Sprawdzenie obecności danych EXIF
exif_data = image._getexif()
if exif_data:
exif_bytes = image.info['exif'] # Zachowanie danych EXIF do późniejszego użycia
else:
print("Dane EXIF są nieobecne.")
# Konwersja obrazu do formatu PNG i optymalizacja
image_png = image.convert("RGB")
image_png.save("optimized_image.png", optimize=True)
# Konwersja do formatu JPEG z zachowaniem danych EXIF i zmniejszeniem jakości
if exif_data:
image.save("compressed_with_exif.jpg", quality=85, exif=exif_bytes)
else:
image.save("compressed_without_exif.jpg", quality=85)
Ten kod zawiera:
- Konwersję obrazu do formatu PNG z optymalizacją.
- Konwersję do formatu JPEG z obniżeniem jakości w celu optymalizacji rozmiaru.
- Zachowanie danych EXIF przy konwersji, jeśli są one obecne.
Praktyczne zastosowanie pracy z formatami i metadanymi EXIF
- Optymalizacja obrazów dla sieci: Konwersja obrazów do zoptymalizowanych formatów, takich jak JPEG i PNG, zmniejsza rozmiar plików i przyspiesza ładowanie stron.
- Wydobywanie danych do raportów: Metadane EXIF zawierają informacje o parametrach wykonania zdjęcia, które mogą być przydatne do analizy zdjęć i tworzenia raportów.
- Zachowanie metadanych podczas edycji: Podczas edytowania obrazów można zachować oryginalne parametry wykonania zdjęcia, co przydaje się do archiwizacji i dokumentacji.
GO TO FULL VERSION