1. Работа с метаданными EXIF
Метаданные EXIF хранят информацию о характеристиках изображения, такие как параметры съемки (ISO, выдержка, диафрагма), дату создания, ориентацию и даже координаты места съемки. EXIF-данные можно извлекать и использовать для анализа изображений или автоматизации их обработки.
Извлечение EXIF-данных
Метаданные EXIF можно извлечь с помощью атрибута info или getexif(). Метод getexif() предоставляет доступ к полному набору EXIF-данных, если они есть в изображении.
# Извлечение 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.
Извлечение даты и времени съемки, разрешения и ориентации
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().
# Проверка наличия 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-данные.
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 содержат информацию о параметрах съемки, которая может быть полезна для анализа фотографий и создания отчетов.
- Поддержание метаданных при редактировании: При редактировании изображений можно сохранить исходные параметры съемки, что полезно для архивирования и документации.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ