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 містять інформацію про параметри зйомки, яка може бути корисною для аналізу фотографій і створення звітів.
- Збереження метаданих при редагуванні: При редагуванні зображень можна зберігати оригінальні параметри зйомки, що корисно для архівування і документації.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ