CodeGym /Kursy /Python SELF PL /Praca z metadanymi

Praca z metadanymi

Python SELF PL
Poziom 46 , Lekcja 3
Dostępny

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.

Python

# 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

Python

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().

Python

# 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.

Python

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.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION