본문 바로가기
  • You find inspiration to create your own path !
업무 자동화/python

아이폰 사진 속성 정보 가져오기

by ToolBOX01 2026. 6. 13.
반응형

 

 

[iOS 15] 아이폰 사진 메타데이터 확인 그리고 수정까지

아이폰에 저장되어있는 사진은 사진의 카메라 종류, 위치 정보 등 이미지의 상세 정보를 포함하는 EXIF 데이터 혹은 또는 메타데이터가 함께 저장됩니다. 그동안 아이폰에서 이 메타데이터를 확

stopoverhere.tistory.com

 

■ 사진속 메타정보

이미지 파일(JPEG, HEIC, TIFF 등)에 사진 본래의 영상 데이터 외에 메타정보(EXIF, IPTC, XMP 등)를 함께 담아 저장하는 데에는 관리, 기술, 그리고 사후 활용 측면에서 중요 합니다.

1. 사진의 '촬영 당시 상황'을 정확히 기록하기 위해

카메라는 단순히 빛을 담는 것을 넘어, 그 순간의 기술적 환경을 데이터로 박제합니다.

  • 기술적 재현성:
    어떤 렌즈로, 어떤 노출값(f값, 셔터스피드, ISO)으로 찍었는지 기록함으로써, 나중에 같은 느낌의 사진을 재현하거나 촬영 기법을 복기할 수 있습니다.
  • 자동 보정의 기준:
    스마트폰이나 카메라 프로세서가 사진을 저장할 때, 메타정보에 기록될 렌즈의 특성을 바탕으로 왜곡이나 광량 저하(비네팅)를 자동으로 소프트웨어 보정하는 기준점이 됩니다.

2. 수만 장의 사진을 쉽게 분류하고 검색하기 위해

디지털 사진의 시대가 되면서 개인이 보유한 사진이 수만, 수십만 장으로 늘어났습니다. 메타정보가 없다면 원하는 사진을 찾는 것은 불가능에 가깝습니다.

  • 시간과 장소 기준 정렬:
    "2024년 10월에 찍은 사진", "제주도에서 찍은 사진"처럼 시간(Timestamp)과 위치(GPS) 메타정보를 이용해 터치 몇 번으로 사진을 자동 분류하고 지지도 위에 표시할 수 있습니다.
  • AI 및 키워드 검색:
    기기 내부의 AI가 메타정보와 이미지 내용을 결합해 '바다', '고양이', '사람 얼굴' 등을 인식하고 검색할 수 있도록 돕는 기초 데이터가 됩니다.

3. 저작권 보호 및 관리(프로페셔널 영역)하기 위해

사진 작가나 언론사, 스튜디오 등 전문적인 영역에서 메타정보는 일종의 '소유권 문서' 역할을 합니다.

  • 저작자 및 판권 명시:
    사진 안에 작가 이름, 촬영 장비, 저작권 규정(Copyright), 연합뉴스나 로이터 같은 출처(IPTC 데이터)를 심어두어 무단 도용을 방지하고 권리를 주장할 수 있습니다.
  • 워크플로우 효율화:
    어도비 라이트룸이나 포토샵 같은 편집 프로그램에서 수천 장의 사진을 카테고리별, 카메라별로 묶어 일괄 편집(Batch Processing)할 때 메타정보를 기준으로 작업합니다.

 

4. 기기 및 플랫폼 간의 '색상 및 화면 호환성'을 위해

메타정보에는 사진이 어떤 색상 영역을 기준으로 만들어졌는지(sRGB, Adobe RGB, Display P3 등)에 대한 색 공간(Color Space) 정보와 회전 방향 정보가 들어있습니다.

  • 일관된 색상 표현:
    이 정보가 있어야 아이폰, 갤럭시, 모니터, 인쇄기 등 서로 다른 디스플레이에서도 제작자가 의도한 원래 색상 그대로 사진을 보여줄 수 있습니다.
  • 올바른 방향 표시:
    카메라를 가로로 찍었는지 세로로 찍었는지 메타정보(Orientation)에 기록해 두어야, 어떤 기기에서 열어도 사진이 뒤집히지 않고 똑바로 보입니다.

■ 사진(이미지)에 메타 정보를 편집하여 넣을수 있나

상세한 메타정보(출처, 촬영 장소 GPS, 렌즈 정보 등)를 입력하거나 수천 장의 사진에 일괄적으로 메타정보를 심어야 할 때 Tool을 사용 합니다.

ExifTool:
개발자나 파워 유저들이 사용하는 강력한 명령행(CLI) 기반의 무료 도구로, JPEG의 모든 메타데이터를 완벽하게 제어할 수 있습니다.

ExifTool 사용 예시

1. 메타데이터 읽기

</> cmd
exiftool image.jpg

출력

File Name              : image.jpg
Camera Model Name      : Canon EOS R5
Date/Time Original     : 2026:06:01 15:30:12
GPS Latitude           : 37 deg 34' 12.34"
GPS Longitude          : 126 deg 58' 45.67"

 

2. 메타데이터 수정

저작권 추가

</> cmd
exiftool -copyright="홍길동" image.jpg

설명 추가

</> cmd
exiftool -comment="제품 사진" image.jpg

 

3. 해시값 생성

파일 검증

</> cmd
exiftool -MD5 image.jpg

또는

</> cmd
exiftool -SHA256 image.jpg

활용

 

  • 파일 무결성 검사
  • 증거 보존
  • 데이터 검증

위 ExifTool 기능을 제조 부분에 활용 한다면,  검사 이미지에 검사자, 검사일, 검사결과 등을 자동 기록 할수 있습니다.


프로그래밍 코드로 입력하기 (자동화 및 개발용)

파이썬(Python) 같은 프로그래밍 언어를 이용하면 대량의 JPEG 파일에 메타정보를 자동으로 입력하는 시스템을 만들 수 있습니다. 또는 분류가 가능한 프로그램을 만들수 있습니다. 예를 들어 파이썬의 piexif나 Pillow 라이브러리를 사용하면 다음과 같이 코드 몇 줄로 JPEG 파일에 EXIF 데이터(메타데이터)를 직접 주입할 수 있습니다.

import piexif
from PIL import Image

# 1. 이미지 열기
img = Image.open("photo.jpg")

# 2. 넣고 싶은 메타정보(EXIF) 정의 (예: 저작권 및 아티스트 이름)
exif_dict = {"0th": {
    piexif.ImageIFD.Artist: u"korea",
    piexif.ImageIFD.Copyright: u"Copyright 2026. Go All rights reserved."
}}

# 3. 데이터를 바이트로 변환
exif_bytes = piexif.dump(exif_dict)

# 4. 메타정보를 포함하여 JPEG로 저장
img.save("photo_with_meta.jpg", exif=exif_bytes)

 

포맷 변환 주의: JPEG를 다른 포맷(예: BMP 등)으로 변환하는 과정에서 메타정보 레이어가 날아갈 수 있으므로 변환 프로그램을 사용할 때는 메타데이터 유지 옵션을 확인해야 합니다.

아이폰에서 촬영한 사진(JPEG 또는 HEIC 포맷)에 담긴 EXIF 메타정보를 파이썬으로 가져오는 가장 대표적이고 안정적인 방법은 Pillow(PIL) 라이브러리와 piexif 라이브러리를 조합하여 사용하는 것입니다.

최근 아이폰은 용량 절감을 위해 기본 촬영 포맷으로 HEIC(High Efficiency Image Container)를 주로 사용하므로, JPEG뿐만 아니라 HEIC 포맷도 함께 처리할 수 있도록 내장 코덱 패키지인 pillow-heif를 함께 사용하는 것이 좋습니다.

필수 라이브러리 설치

pip install Pillow pillow-heif piexif

 

메타정보 추출 파이썬 코드

import os
from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS
from pillow_heif import register_heif_opener

# 아이폰의 HEIC 포맷 지원을 위해 오프너 등록
register_heif_opener()

def get_clean_exif(image_path):
    try:
        img = Image.open(image_path)
        # 이미지에서 EXIF 데이터 추출
        exif_data = img._getexif()
        
        if not exif_data:
            print("EXIF 정보가 없는 이미지입니다.")
            return None
        
        clean_exif = {}
        for tag, value in exif_data.items():
            # 숫자 코드로 된 태그를 'Model', 'DateTimeOriginal' 같은 문자열 태그로 변환
            tag_name = TAGS.get(tag, tag)
            
            # GPS 정보 특수 처리
            if tag_name == "GPSInfo":
                gps_data = {}
                for gps_tag in value:
                    gps_tag_name = GPSTAGS.get(gps_tag, gps_tag)
                    gps_data[gps_tag_name] = value[gps_tag]
                clean_exif[tag_name] = gps_data
            else:
                clean_exif[tag_name] = value
                
        return clean_exif
    except Exception as e:
        print(f"에러 발생: {e}")
        return None

def convert_to_degrees(value):
    """ GPS 도/분/초 데이터를 실수형(Decimal Degree) 좌표로 변환 """
    d = float(value[0])
    m = float(value[1])
    s = float(value[2])
    return d + (m / 60.0) + (s / 3600.0)

# ---------------------------------------------------------
# 사용 예시 (사진 파일 경로를 입력하세요)
# ---------------------------------------------------------
file_path = "iphone_photo.HEIC"  # 또는 "photo.jpg"

if os.path.exists(file_path):
    exif = get_clean_exif(file_path)
    
    if exif:
        print("=== 주요 촬영 정보 ===")
        print(f"📷 촬영 기종: {exif.get('Make')} {exif.get('Model')}")
        print(f"📅 촬영 일시: {exif.get('DateTimeOriginal')}")
        print(f"🎯 소프트웨어: {exif.get('Software')}")
        print(f"📐 해상도: {exif.get('ExifImageWidth')} x {exif.get('ExifImageHeight')}")
        print(f"⚡ 셔터 속도: 1/{int(1/exif.get('ExposureTime')) if exif.get('ExposureTime') else '알수없음'} 초")
        print(f"🔘 조리개값: f/{exif.get('FNumber')}")
        print(f"🌟 ISO 감도: {exif.get('ISOSpeedRatings')}")
        
        # GPS 위치 정보 출력
        if "GPSInfo" in exif:
            gps = exif["GPSInfo"]
            try:
                lat_values = gps.get("GPSLatitude")
                lon_values = gps.get("GPSLongitude")
                lat_ref = gps.get("GPSLatitudeRef")  # 'N' or 'S'
                lon_ref = gps.get("GPSLongitudeRef")  # 'E' or 'W'
                
                if lat_values and lon_values:
                    lat = convert_to_degrees(lat_values)
                    lon = convert_to_degrees(lon_values)
                    
                    if lat_ref == 'S': lat = -lat
                    if lon_ref == 'W': lon = -lon
                    
                    print("\n=== GPS 위치 정보 ===")
                    print(f"📍 위도(Latitude): {lat}")
                    print(f"📍 경도(Longitude): {lon}")
                    print(f"🗺️ 구글맵 링크: https://www.google.com/maps?q={lat},{lon}")
            except Exception as gps_err:
                print(f"\nGPS 분석 중 오류: {gps_err}")
else:
    print(f"파일을 찾을 수 없습니다: {file_path}")

 

출력

$ python extract_exif.py
[INFO] pillow_heif 코덱이 등록되었습니다.
[INFO] 'iphone_photo.HEIC' 파일을 분석하는 중...

=== 주요 촬영 정보 ===
📷 촬영 기종: Apple iPhone 15 Pro
📅 촬영 일시: 2026:05:12 14:35:22
🎯 소프트웨어: 19.4
📐 해상도: 4032 x 3024
⚡ 셔터 속도: 1/120 초
🔘 조리개값: f/1.78
🌟 ISO 감도: 50

=== GPS 위치 정보 ===
📍 위도(Latitude): 37.511421
📍 경도(Longitude): 127.119745
🗺️ 구글맵 링크: https://maps.google.com/?q=37.511421,127.119745

Process finished with exit code 0

 

만약 수천 장의 사진을 루프를 돌며 특정 데이터베이스(SQLite, PostgreSQL 등)나 엑셀 파일로 정리하는 자동화 스크립트로 확장하고 싶으시다면, 이 구조를 기반으로 파일 목록 분기(os.listdir)만 추가해 주면 됩니다

by korealionkk@gmail.com


반응형

'업무 자동화 > python' 카테고리의 다른 글

PDF를 DXF로 변환 하기  (0) 2026.06.19
이미지 관리 프로그램 # 2  (0) 2026.06.14
이미지 관리 프로그램 # 1  (1) 2026.06.12
Get dimensions from a Creo model #2  (1) 2025.09.18
Qt Designer 학습] 시그널 이란?  (0) 2025.09.10