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

Работа с метаданными

Python SELF
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 содержат информацию о параметрах съемки, которая может быть полезна для анализа фотографий и создания отчетов.
  • Поддержание метаданных при редактировании: При редактировании изображений можно сохранить исходные параметры съемки, что полезно для архивирования и документации.
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ