JavaRush /Курси /Python SELF UA /Робота з метаданими

Робота з метаданими

Python SELF UA
Рівень 46 , Лекція 3
Відкрита

1. Робота з метаданими EXIF

Метадані EXIF зберігають інформацію про характеристики зображення, такі як параметри зйомки (ISO, витримка, діафрагма), дату створення, орієнтацію та навіть координати місця зйомки. EXIF-дані можна витягувати і використовувати для аналізу зображень чи автоматизації їх обробки.

Витягування EXIF-даних

Метадані EXIF можна витягнути за допомогою атрибуту info або getexif(). Метод getexif() надає доступ до повного набору EXIF-даних, якщо вони є в зображенні.

Python

# Витягування EXIF-даних
exif_data = image._getexif()

# Перевірка наявності 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("EXIF-дані не знайдено.")

У цьому коді Image.ExifTags.TAGS використовується для декодування ідентифікаторів тегів EXIF у читабельні назви, такі як "DateTime", "ExposureTime", "ISOSpeedRatings", тощо. Якщо зображення не містить EXIF-даних, функція просто виведе повідомлення про це.

2. Витягування ключових метаданих

Метадані EXIF часто включають параметри зйомки, такі як роздільна здатність, орієнтація та геолокація. Розглянемо, як отримати деякі з цих значень, якщо вони присутні в даних EXIF.

Витягування дати і часу зйомки, роздільної здатності та орієнтації

Python

from PIL.ExifTags import TAGS

# Перевірка наявності EXIF-даних
if exif_data is not None:
    # Ініціалізація змінних для збереження значень
    date_time = None
    orientation = None
    resolution = None

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

        # Витягування даних за тегами
        if tag == "DateTime":
            date_time = value
        elif tag == "Orientation":
            orientation = value
        elif tag == "XResolution" or tag == "YResolution":
            resolution = value

    print("Дата і час зйомки:", date_time)
    print("Орієнтація:", orientation)
    print("Роздільна здатність:", resolution)
else:
    print("EXIF-дані не знайдено.")

У цьому прикладі витягуються значення для DateTime (дата і час зйомки), Orientation (орієнтація зображення) і XResolution/YResolution (роздільна здатність зображення). Такі дані часто корисні при сортуванні фотографій чи створенні звітів.

3. Додавання і редагування метаданих EXIF

Хоча Pillow обмежено підтримує додавання EXIF-даних, можна зберігати метадані при конвертації зображень, якщо вони вже наявні в початковому зображенні.

Приклад: Збереження метаданих при конвертації

Щоб зберегти EXIF-дані при збереженні зображення, використовуйте параметр exif при виклику методу save().

Python

# Перевірка наявності EXIF та збереження з метаданими
if exif_data is not None:
    exif_bytes = image.info['exif']
    image.save("converted_with_exif.jpg", exif=exif_bytes)
else:
    print("EXIF-дані відсутні.")

Цей код зберігає EXIF-дані при конвертації зображення в інший формат, що дозволяє зберегти оригінальні параметри зйомки.

4. Приклади:

Приклад повної роботи з форматами і метаданими EXIF

На завершення, розглянемо приклад, який конвертує зображення, оптимізує його і зберігає EXIF-дані.

Python

from PIL import Image, ExifTags

# Відкриття зображення
image = Image.open("original.jpg")

# Перевірка наявності EXIF-даних
exif_data = image._getexif()
if exif_data:
    exif_bytes = image.info['exif']  # Зберігаємо EXIF-дані для подальшого використання
else:
    print("EXIF-дані відсутні.")

# Конвертація зображення в PNG та оптимізація
image_png = image.convert("RGB")
image_png.save("optimized_image.png", optimize=True)

# Конвертація в JPEG із збереженням EXIF-даних і зменшенням якості
if exif_data:
    image.save("compressed_with_exif.jpg", quality=85, exif=exif_bytes)
else:
    image.save("compressed_without_exif.jpg", quality=85)

Цей код включає:

  • Конвертацію зображення в формат PNG з оптимізацією.
  • Конвертацію в формат JPEG зі зменшенням якості для оптимізації розміру.
  • Збереження EXIF-даних при конвертації, якщо вони присутні.

Практичне застосування роботи з форматами і метаданими EXIF

  • Оптимізація зображень для вебу: Конвертація зображень в оптимізовані формати, такі як JPEG і PNG, зменшує розмір файла і пришвидшує завантаження сторінок.
  • Витягування даних для звітів: Метадані EXIF містять інформацію про параметри зйомки, яка може бути корисною для аналізу фотографій і створення звітів.
  • Збереження метаданих при редагуванні: При редагуванні зображень можна зберігати оригінальні параметри зйомки, що корисно для архівування і документації.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ