1. EXIF 메타데이터 작업
EXIF 메타데이터는 ISO, 셔터 속도, 조리개와 같은 촬영 매개변수, 생성 날짜, 방향 및 촬영 위치 좌표와 같은 이미지 특성에 대한 정보를 저장해. EXIF 데이터를 추출하면 이미지를 분석하거나 처리 자동화를 수행할 수 있어.
EXIF 데이터 추출하기
EXIF 메타데이터는 info
또는 getexif()
속성을 사용하여 추출할 수 있어. getexif()
메서드는 이미지에 EXIF 데이터가 포함되어 있다면 완전한 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 태그 ID를 읽을 수 있는 이름으로 디코딩해, 예를 들어 "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 데이터를 추가하는 데 제한적으로 지원하지만, 변환 시 원본 이미지에 이미 존재하는 메타데이터를 유지할 수 있어.
예: 변환 시 메타데이터 저장
이미지를 저장할 때 save()
메서드의 exif
매개변수를 사용하여 EXIF 데이터를 저장할 수 있어.
# 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)
# 품질을 줄이고 EXIF 데이터를 저장하며 JPEG로 변환
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 메타데이터는 촬영 매개변수 정보를 포함하며, 사진 분석과 보고서 작성에 유용해.
- 편집 시 메타데이터 유지: 이미지를 편집할 때 원본 촬영 매개변수를 유지하면 아카이브 및 문서화에 유용해.
GO TO FULL VERSION