EXIF(교환 이미지 파일 형식)는 카메라와 휴대폰이 이미지 파일(노출, 렌즈, 타임스탬프, GPS까지)에 내장하는 캡처 메타데이터 블록으로, JPEG 및 TIFF와 같은 형식 내에 패키지된 TIFF 스타일 태그 시스템을 사용합니다. 사진 라이브러리 및 워크플로 전반에 걸쳐 검색 기능, 정렬 및 자동화에 필수적이지만 부주의하게 공유될 경우 의도하지 않은 유출 경로가 될 수도 있습니다(ExifTool 및 Exiv2를 사용하면 쉽게 검사할 수 있음).
낮은 수준에서 EXIF는 TIFF의 이미지 파일 디렉토리(IFD) 구조를 재사용하고 JPEG에서는 APP1 마커(0xFFE1) 내에 존재하여 작은 TIFF를 JPEG 컨테이너 내에 효과적으로 중첩시킵니다(JFIF 개요, CIPA 사양 포털). 공식 사양인 CIPA DC-008(EXIF)(현재 3.x)은 IFD 레이아웃, 태그 유형 및 제약 조건을 문서화합니다(CIPA DC-008, 사양 요약). EXIF는 전용 GPS 하위 IFD(태그 0x8825)와 상호 운용성 IFD(0xA005)를 정의합니다(Exif 태그 테이블).
패키징 세부 정보가 중요합니다. 일반적인 JPEG는 JFIF APP0 세그먼트로 시작하고 그 뒤에 APP1의 EXIF가 옵니다. 이전 리더는 JFIF를 먼저 예상하는 반면 최신 라이브러리는 둘 다를 즐겁게 구문 분석합니다(APP 세그먼트 참고). 실제 파서는 사양이 요구하지 않는 APP 순서나 크기 제한을 가정하는 경우가 있으며, 이것이 도구 작성자가 기이함과 특이 사례를 문서화하는 이유입니다(Exiv2 메타데이터 가이드, ExifTool 문서).
EXIF는 JPEG/TIFF에만 국한되지 않습니다. PNG 생태계는 PNG에서 EXIF를 전달하기 위해 eXIf 청크를 표준화했습니다(지원이 증가하고 있으며 IDAT에 대한 청크 순서는 일부 구현에서 중요할 수 있음). RIFF 기반 형식인 WebP는 전용 청크에 EXIF, XMP 및 ICC를 수용합니다(WebP RIFF 컨테이너, libwebp). Apple 플랫폼에서 Image I/O는 XMP 및 제조업체 데이터와 함께 HEIC/HEIF로 변환할 때 EXIF를 보존합니다(kCGImagePropertyExifDictionary).
앱이 카메라 설정을 어떻게 유추하는지 궁금한 적이 있다면 EXIF의 태그 맵이 답입니다. Make, Model,FNumber, ExposureTime, ISOSpeedRatings, FocalLength, MeteringMode, 등은 기본 및 EXIF 하위 IFD에 있습니다(Exif 태그, Exiv2 태그). Apple은 ExifFNumber 및 GPSDictionary와 같은 Image I/O 상수를 통해 이를 노출합니다. Android에서는 AndroidX ExifInterface 가 JPEG, PNG, WebP 및 HEIF에서 EXIF를 읽고 씁니다.
방향은 특별히 언급할 가치가 있습니다. 대부분의 장치는 픽셀을 "촬영된 대로" 저장하고 뷰어에게 디스플레이에서 회전하는 방법을 알려주는 태그를 기록합니다. 이것이 1(보통), 6(시계 방향 90°), 3(180°), 8(시계 방향 270°)과 같은 값을 가진 태그 274(Orientation)입니다. 이 태그를 존중하거나 업데이트하지 않으면 사진이 옆으로 눕고 축소판이 일치하지 않으며 다운스트림 ML 오류가 발생합니다 (방향 태그;실용 가이드). 파이프라인은 종종 픽셀을 물리적으로 회전하고 Orientation=1로 설정하여 정규화합니다 (ExifTool).
시간 기록은 보기보다 까다롭습니다. DateTimeOriginal과 같은 과거 태그에는 시간대가 없어 국경을 넘는 촬영이 모호해집니다. 최신 태그는 시간대 동반자를 추가합니다(예: OffsetTimeOriginal). 따라서 소프트웨어는 건전한 순서 지정 및 지리 상관 관계를 위해 DateTimeOriginal