CodeGym /자바 코스 /Python SELF KO /메타데이터 작업

메타데이터 작업

Python SELF KO
레벨 46 , 레슨 3
사용 가능

1. EXIF 메타데이터 작업

EXIF 메타데이터는 ISO, 셔터 속도, 조리개와 같은 촬영 매개변수, 생성 날짜, 방향 및 촬영 위치 좌표와 같은 이미지 특성에 대한 정보를 저장해. EXIF 데이터를 추출하면 이미지를 분석하거나 처리 자동화를 수행할 수 있어.

EXIF 데이터 추출하기

EXIF 메타데이터는 info 또는 getexif() 속성을 사용하여 추출할 수 있어. getexif() 메서드는 이미지에 EXIF 데이터가 포함되어 있다면 완전한 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 태그 ID를 읽을 수 있는 이름으로 디코딩해, 예를 들어 "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 데이터를 추가하는 데 제한적으로 지원하지만, 변환 시 원본 이미지에 이미 존재하는 메타데이터를 유지할 수 있어.

예: 변환 시 메타데이터 저장

이미지를 저장할 때 save() 메서드의 exif 매개변수를 사용하여 EXIF 데이터를 저장할 수 있어.

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)

# 품질을 줄이고 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 메타데이터는 촬영 매개변수 정보를 포함하며, 사진 분석과 보고서 작성에 유용해.
  • 편집 시 메타데이터 유지: 이미지를 편집할 때 원본 촬영 매개변수를 유지하면 아카이브 및 문서화에 유용해.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION