멀티미디어/이미지(Image)
EXIF Format
cepiloth
2016. 1. 26. 09:45
728x90
많은 디지털 카메라는 파일을 저장하면서 Exif 포맷을 사용한다. 이 명세는 JEIDA에서 제정되었으나 인터넷상에 공개된 문서는 없다. 그래서 인터넷에서 구할 수 있는 공개 문서를 기본으로 간단한 Exif명세를 작성해 보았다.
추가: PIMA의 웹사이트에서 Exif2.1의 공식 문서를 받을 수 있다. ISO는 DCF(Design rule for Camera File system) 명세를 작성중이다. 디카 제조사들은 DCF를 사용하도록 바뀌어가고 있으며, 그들의 새로운 디카들은 이미 DCF를 사용하고 있다. 이 문서는 Exif2.1/DCF문서에 기초하였으며, 만약 'unknown' 항목에 대해 정보가 있으면 e-mail을 보내주시기 바랍니다.
(TsuruZoh Tachibanaya , t s u r u z o h @ b a . w a k w a k . c o m )
이 문서의 전체 혹은 부분은 상업적/비상업적 사용상에 제한이 없습니다. 이 문서에 나오는 모든 등록 상표는 해당 회사의 등록 상표입니다.
참고목록
기본적으로, Exif파일 포맷은 JPEG파일 포맷과 동일하다. Exif는 JPEG포맷에 호환되도록 이미지/디지털카메라의 정보와 썸네일을 JPEG파일에 추가한다. 따라서, Exif포맷의 이미지 역시 JPEG와 마찬가지로 JPEG에 호환성이 있는 인터넷 브라우저, 이미지 뷰어, 사진 리터칭 프로그램 등에서 볼 수 있다.
모든 JPEG파일은 0xFFD8 으로 시작하고, 0xFFD9로 끝난다. JPEG데이터에는 여러개의 0xFFXX 데이터가 있으며, 이들은 "Marker"로 불린다. 0xFFD8은 SOI(Start of image)이고, 0xFFD9는 EOI(End of image)이다. 이 두개의 지정된 마커는 뒤따르는 데이터는 없으며, 다른 마커들은 데이터를 포함하고 있다. 마커의 기본적인 구조는 아래와 같다.
0xFF+Marker 번호(1 byte)+Data size(2 bytes)+Data(n bytes)
Data size(2 Bytes)는 "Motorola" byte 순서를 따른다. 알아두어야 할 점은 "Data"는 Data size 부분을 포함한다. 예를들어, 아래와 같은 데이터가 있다면;
FF C1 00 0C
이 마커(0xFFC1)는 0x000C(=12)바이트의 데이터를 가지고 있으며, 이 값에는 "데이터 크기" 영역이 포함되어 있으므로, 0x000C 뒤로 10바이트의 데이터가 존재하는 것이다.
In JPEG format, some of Markers describe data, then SOS(Start of stream) Marker placed. After the SOS marker, JPEG image stream starts and terminated by EOI Marker.
0xFF+Marker 번호(1 byte)+Data size(2 bytes)+Data(n bytes)
Data size(2 Bytes)는 "Motorola" byte 순서를 따른다. 알아두어야 할 점은 "Data"는 Data size 부분을 포함한다. 예를들어, 아래와 같은 데이터가 있다면;
FF C1 00 0C
이 마커(0xFFC1)는 0x000C(=12)바이트의 데이터를 가지고 있으며, 이 값에는 "데이터 크기" 영역이 포함되어 있으므로, 0x000C 뒤로 10바이트의 데이터가 존재하는 것이다.
In JPEG format, some of Markers describe data, then SOS(Start of stream) Marker placed. After the SOS marker, JPEG image stream starts and terminated by EOI Marker.
| SOI Marker | Marker XX size=SSSS | Marker YY size=TTTT | SOS Marker size=UUUU | Image stream | EOI Marker | ||||||
| FFD8 | FFXX | SSSS | DDDD...... | FFYY | TTTT | DDDD...... | FFDA | UUUU | DDDD.... | I I I I.... | FFD9 |
0xFFE0부터 0xFFEF는 "Application Marker"로 명명되어 있으며, 이는 JPEG 이미지를 디코딩하는데 필요하지 않다. 예를 들어, 구형 올림푸스/캐논/카시오/아그파 디지털 카메라는 이미지를 저장하는데 JFIF(JPEG File Interchange Format)를 사용하며, 이 포맷은 디지털카메라 정보와 썸네일 이미지를 저장하는데 APP0 마커를 사용한다.
Exif역시 데이터를 저장하는데 Application Marker를 사용하며, JFIF포맷과의 충돌을 피하기 위해 APP1(0xFFE1) 마커를 사용한다. 모든 Exif 파일 포맷은 이 포맷으로 시작한다.
SOI(0xFFD8)마커로 시작하므로 JPEG파일임을 알 수 있으며 그 뒤로 바로 APP1 마커가 뒤따른다. 모든 Exif데이터는 이 APP1 마커 영역에 저장되어 있다. 위 테이블의 "SSSS"는 APP1 데이터 영역의 크기를 나타내며, 이 "SSSS"는 자기 자신도 전체 크기에 포함시킨다는것임에 주의해야 한다.
"SSSS"다음으로, APP1 데이터가 시작된다. 첫번째 부분은 이 데이터가 Exif데이터가 맞는지를 판단하기 위한 부분이며 ASCII문자로 "Exif"과 두개의 0x00이 뒤따른다.
APP1 마커 영역이 끝나면 다른 JPEG 마커가 뒤따른다.
역자 주 : PHP에서는 getimagesize()로 IPTC정보를 받아온 다음 "APP1" 영역으로 접근하면 Exif....로 시작하는 부분을 바로 받아올 수 있습니다. 단순히 exif데이터만 필요하다면 exif_read_data()함수를 쓰시면 됩니다.
Exif역시 데이터를 저장하는데 Application Marker를 사용하며, JFIF포맷과의 충돌을 피하기 위해 APP1(0xFFE1) 마커를 사용한다. 모든 Exif 파일 포맷은 이 포맷으로 시작한다.
| SOI Marker | APP1 Marker | APP1 Data | Other Marker |
| FFD8 | FFE1 | SSSS 457869660000 TTTT...... | FFXX SSSS DDDD...... |
SOI(0xFFD8)마커로 시작하므로 JPEG파일임을 알 수 있으며 그 뒤로 바로 APP1 마커가 뒤따른다. 모든 Exif데이터는 이 APP1 마커 영역에 저장되어 있다. 위 테이블의 "SSSS"는 APP1 데이터 영역의 크기를 나타내며, 이 "SSSS"는 자기 자신도 전체 크기에 포함시킨다는것임에 주의해야 한다.
"SSSS"다음으로, APP1 데이터가 시작된다. 첫번째 부분은 이 데이터가 Exif데이터가 맞는지를 판단하기 위한 부분이며 ASCII문자로 "Exif"과 두개의 0x00이 뒤따른다.
APP1 마커 영역이 끝나면 다른 JPEG 마커가 뒤따른다.
역자 주 : PHP에서는 getimagesize()로 IPTC정보를 받아온 다음 "APP1" 영역으로 접근하면 Exif....로 시작하는 부분을 바로 받아올 수 있습니다. 단순히 exif데이터만 필요하다면 exif_read_data()함수를 쓰시면 됩니다.
| FFE1 | APP1 Marker | ||||
| SSSS | APP1 Data | APP1 Data Size | |||
| 45786966 0000 | Exif Header | ||||
| 49492A00 08000000 | TIFF Header | ||||
| XXXX. . . . | IFD0 (main image) | Directory | |||
| LLLLLLLL | Link to IFD1 | ||||
| XXXX. . . . | Data area of IFD0 | ||||
| XXXX. . . . | Exif SubIFD | Directory | |||
| 00000000 | End of Link | ||||
| XXXX. . . . | Data area of Exif SubIFD | ||||
| XXXX. . . . | Interoperability IFD | Directory | |||
| 00000000 | End of Link | ||||
| XXXX. . . . | Data area of Interoperability IFD | ||||
| XXXX. . . . | Makernote IFD | Directory | |||
| 00000000 | End of Link | ||||
| XXXX. . . . | Data area of Makernote IFD | ||||
| XXXX. . . . | IFD1(thumbnail image) | Directory | |||
| 00000000 | End of Link | ||||
| XXXX. . . . | Data area of IFD1 | ||||
| FFD8XXXX. . . XXXXFFD9 | Thumbnail image | ||||
TIFF헤더의 구조
TIFF포맷의 첫 8바이트는 TIFF 헤더이다. 처음의 2바이트는 데이터의 바이트 오더를 나타낸다. 만약 이 값이 0x4949="I I"이면 이는 "Intel" 형태의 바이트 오더이며, 이 값이 0x4d4d="MM"이면, "Motorola" 형태의 바이트 오더이다. 예를 들어, 10진수 '305,419,896'값은 16진수로 0x12345678로 표현할 수 있다. Motorola 오더로는 이 값은 0x12, 0x34, 0x56, 0x78로 저장되며, Intel 오더로는 0x78, 0x56, 0x34, 0x12순서로 저장된다. 대부분의 디지털 카메라는 Intel 오더를 사용하고 있는 것으로 보이나, 리코는 Motorola 오더를 사용한다. 소니는 D700을 제외하고는 Intel 오더를 사용한다. 코닥 DC200/210/240은 Motorola 오더를 사용하지만 DC220/260은 PowerPC를 사용하므로 Intel 오더를 사용한다. 따라서, 매번 Exif를 읽을 때마다 바이트 오더를 꼭 확인해야 한다. JPEG데이터는 Motorola 오더만 사용하지만 Exif는 두가지 오더의 사용을 허용한다. Exif는 왜 Motorola 오더를 사용하도록 규정하지 않는지 모르겠다.다음 2바이트는 0x002A이다. Intel오더를 사용한다면 다음 2바이트는 "0x2a,0x00"가 될 것이며, Motorola 오더를 사용한다면 "0x00,0x2a"가 될 것이다. 마지막 4바이트는 첫번째 IFD(Image File Directory, 다음 챕터에서 설명)의 주소를 가리킨다. TIFF에서 사용되는 주소값은 TIFF헤더의 처음("I I" or "MM")을 기준으로 한다. 보통은 IFD는 TIFF헤더 바로 뒤에 위치하므로 이 값은 0x00000008이다.
역자 주 : 인텔 오더, 모토로라 오더는 흔히 말하는 Big-Endian, Little-Endian입니다.
| Byte align | TAG Mark | Offset to first IFD |
| "I I" or "MM" | 0x002a | 0x00000008 |
IFD : Image file directory
TIFF헤더 다음으로는 첫번째 IFD:Image File Directory이다. 이미지 정보를 담고 있으며, 아래 표에서 보듯이, 첫번째 2바이트('EEEE')는 이 IFD에 담고 있는 directory entry의 갯수이며, 이어서 디렉토리 엔트리(각 엔트리별 12바이트)가 뒤따르게 된다. 마지막 디렉토리 엔트리 다음으로는 4바이트 값(표에서 'LLLLLLLL')이 뒤따르게 되며 이 값은 다음 IFD의 주소값이다. 만약 이 값이 0x00000000이면 현재 IFD가 마지막 IFD임을 의미한다.| EEEE | No. of directory entry | |||
| TTTT | ffff | NNNNNNNN | DDDDDDDD | Entry 0 |
| TTTT | ffff | NNNNNNNN | DDDDDDDD | Entry 1 |
| . . . . . . . . . | . . . . . . | |||
| TTTT | ffff | NNNNNNNN | DDDDDDDD | Entry EEEE-1 |
| LLLLLLLL | Offset to next IFD | |||
위 표에서 'TTTT'(2바이트)는 태그 번호이며, 이는 어떤 데이터인지 나타낸다. 'ffff'(2바이트)는 데이터형이며, 'NNNNNNNN'(4바이트)는 컴포넌트의 갯수이다. 'DDDDDDDD'(4바이트)는 직접적인 데이터를 담고 있거나 데이터의 주소를 가리킨다.
Data format
데이터형(위 표의 'ffff')는 아래와 같이 정의되어 있으며, "rational"은 분수값을 의미한다. 이 값은 두개의 signed/unsigned long integer값을 가지며 첫번째 값은 분자, 두번째 값은 분모가 된다.| Value | 1 | 2 | 3 | 4 | 5 | 6 |
| Format | unsigned byte | ascii strings | unsigned short | unsigned long | unsigned rational | signed byte |
| Bytes/component | 1 | 1 | 2 | 4 | 8 | 1 |
| Value | 7 | 8 | 9 | 10 | 11 | 12 |
| Format | undefined | signed short | signed long | signed rational | single float | double float |
| Bytes/component | 1 | 2 | 4 | 8 | 4 | 8 |
위 표에서 'bytes/components'값과 'NNNNNNNN'부분의 컴포넌트 갯수를 곱하여 전체 데이터 크기를 알 수 있다. 이 값이 4바이트보다 작으면 'DDDDDDDD'부분은 태그의 값을 저장하고 있으며, 4바이트보다 큰 경우에는 'DDDDDDDD'부분은 실제 데이터의 주소를 나타낸다.
IFD data structure
Exif포맷에서 첫번째 IFD는 IFD0(본 이미지의 IFD)이며, IFD1(썸네일 이미지의 IFD)로 이어지고 IFD는 끝난다. 하지만 IFD0/IFD1은 디지털카메라의 어떤 정보(셔터스피드, 초점거리 등)도 가지고 있지 않다. IFD0은 항상 Exif Offset (0x8769)의 태그값을 가지며, 이는 Exif SubIFD의 주소값을 나타낸다. Exif SubIFD는 IFD포맷이며, 디지털 카메라의 정보를 담고 있다.확장된 Exif포맷 (Exif2.1/DCF)의 경우에는 Exif SubIFD는 Exif Interoperability Offset (0xa005)라는 태그값을 가지며 Interoperability IFD로의 주소를 담고 있다. DCF명세에 따르면, 이 태그는 필수적이며 SubIFD와 IFD1에 모두 있어야 하나, 일반적으로는 IFD0(SubIFD)에만 포함하고 있다.
그리고, 몇몇의 디지털 카메라는 Makernote(제조사 고유 매직넘버, 즉, 제조사 자체 정보 영역)에 IFD 데이터 포맷을 사용하며 IFD포맷임을 판별하기가 쉽지 않다. 프로그램을 작성할때 유의해야 하며, Makernote에 대해서는 Appendix부분을 참고하라.
0000: 49 49 2A 00 08 00 00 00-02 00 1A 01 05 00 01 00
0010: 00 00 26 00 00 00 69 87-04 00 01 00 00 00 11 02
0020: 00 00 40 00 00 00 48 00-00 00 01 00 00 00
TIFF데이터가 위와 같다면 아래와 같이 해석할 수 있다;
- 첫 2바이트는 "I I"이고, 'Intel' 바이트 오더이다.
- Address 0x0004~0x0007 is 0x08000000, IFD0은 주소 0x0008에서부터 시작된다.
- Address 0x0008~0x0009 is 0x0200, IFD0의 디렉토리 엔트리 개수는 2개이다.
- Address 0x000a~0x000b is 0x1A01, 이 태그는 가로 해상도(XResolution, 0x011A) 태그이다.
- Address 0x000c~0x000d is 0x0500, 이 태그의 값은 unsigned rational(0x0005)이다.
- Address 0x000e~0x0011 is 0x01000000, 컴포넌트의 개수는 1이다. unsigned rational의 데이터 크기는 8bytes/components이므로 전체 데이터 크기는 1*8=8바이트가 된다.
- 전체 데이터의 크기가 4바이트보다 크므로, 다음 4바이트는 데이터의 주소를 가리킨다.
- Address 0x0012~0x0015 is 0x26000000, 가로해상도 데이터는 0x0026주소에 위치한다.
- Address 0x0026~0x0029 is 0x48000000, 분자는 72, 0x002a~0x002d주소의 값은 0x0100000000, 분자는 '1'이다. 즉, 가로 해상도 값은 72/1 이다.
- Address 0x0016~0x0017 is 0x6987, 다음 태그는 ExifOffset(0x8769)이다. 이 값은 Exif SubIFD의 주소이다.
- 데이터형은 0x0004, unsigned long integer이다.
- 이 값은 하나의 컴포넌트를 갖고 있으며, unsigned long integer의 크기는 4bytes/components 이므로 전체 데이터 크기는 4바이트가 된다.
- 전체 데이터 크기가 4바이트이므로, 다음 4바이트는 Exif SubIFD의 주소를 직접 담고 있다.
- Address 0x001e~0x0021 is 0x11020000, Exif SubIFD는 0x0211 주소부터 시작된다.
- 마지막 디렉토리 엔트리이며, 다음 4바이트는 다음 IFD의 주소를 담고 있다.
- Address 0x0022~0x0025 is 0x40000000, 다음 IFD는 0x0040주소에 위치하고 있다.
Thumbnail image
Exif 포맷은 썸네일 이미지를 포함한다 (리코 RDC-300Z 제외). 보통 IFD1 다음에 위치하며 3가지 포맷이 있다 : JPEG(YCbCr JPEG), RGB TIFF, YCbCr TIFF. Exif2.1 이후 버전에서는 JPEG의 160x120 이미지가 권장되는듯 하며, DCF명세 상에서는 썸네일 이미지는 반드시 JPEG포맷의 160x120 크기여야 한다.JPEG format thumbnail
IFD1의 Compression(0x0103)태그 값이 '6'이면 썸네일 이미지는 JPEG포맷이다. 대부분의 Exif 이미지는 JPEG포맷의 썸네일을 사용한다. 이 경우, IFD1의 JpegIFOffset태그의 값을 통해 썸네일의 주소값을, JpegIFByteCount(0x0202)태그를 통해 썸네일의 크기를 받아올 수 있다. 실 데이터는 0xFFD8로 시작하고 0xFFD9로 끝나는 일반적인 JPEG포맷이다.TIFF format thumbnail
IFD1의 Compression(0x0103)태그 값이 '1'이면 썸네일 이미지는 무압축(TIFF) 이미지이다. 썸네일 이미지의 시작 주소는 StripOffset(0x0111)태그에서, 썸네일의 크기는 StripByteCounts(0x0117)태그의 값으로 받아올 수 있다.만약 썸네일이 무압축이고, IFD1의 PhotometricInterpretation(0x0106)태그 값이 '2'이면, 썸네일은 RGB포맷을 사용한다. 이 경우, 단순히 RGB포맷(BMP나 메모리)으로 복사하는 것만으로 볼 수 있다. 코닥 DC-210/220/260이 이 포맷을 사용한다. 유의할점은 TIFF는 픽셀을 RGB순으로 저장하지만 BMP는 BGR순서로 저장한다.
이 태그 값이 '6'이면 썸네일은 YCbCr 포맷을 사용하는 것이다. 썸네일을 보려면 RGB포맷으로 변환해야 한다. 리코 RDC4200/4300, 후지 DS-7/300, DX-5/7/9가 이 포맷을 사용한다(나중에 나온 RDC5000/MX-X00시리즈는 JPEG를 사용한다). 다음은 후지 DS의 썸네일 변환에 대해 설명하고 있다. 더 자세한 내용은 TIFF6.0 specification을 참고하라.
DX-5/7/9에서, YCbCrSubsampling(0x0212)값이 '2,1', PlanarConfiguration(0x011c)값이 '1'이면 데이터 순서는 다음과 같다.
Y(0,0),Y(1,0),Cb(0,0),Cr(0,0), Y(2,0),Y(3,0),Cb(2,0),Cr(3.0), Y(4,0),Y(5,0),Cb(4,0),Cr(4,0). . . .
괄호 안의 숫자는 픽셀의 좌표이다. DX시리즈의 YCbCrCoefficients(0x0211)의 값이 '0.299/0.587/0.114'이고, ReferenceBlackWhite(0x0214)의 값이 '0.255,128,255,128,255'라면 Y/Cb/Cr에서 RGB변환은 다음과 같다.
B(0,0)=(Cb-128)*(2-0.114*2)+Y(0,0)
R(0,0)=(Cr-128)*(2-0.299*2)+Y(0,0)
G(0,0)=(Y(0,0)-0.114*B(0,0)-0.299*R(0,0))/0.587
수평 subsampling 값이 '2'이면, B(1,0)/R(1,0)/G(1,)은 Y(1,0)/Cr(0,0)/Cb(0,0)을 통해서 계산될 수 있다. 이 변환작업을 ImageWidth(0x0100)과 ImageLength(0x0101)동안 반복해주면 된다.
Tag number used by Exif/TIFF
Exif/TIFF에서 사용되는 태그는 아래와 같다. 태그의 컴포넌트 개수에 최대값 제한이 있다면 CompoNo열에 표시되어 있으며, 이 값이 없으면 개수 제한은 없다.| Tag No. | Tag Name | Format | CompoNo | Desc. | |||||||||||||||||||||||||||
| 0x010e | ImageDescription | ascii string | 이미지 설명. 중국어/한국어/일본어 등의 2바이트 문자는 사용할 수 없다. | ||||||||||||||||||||||||||||
| 0x010f | Make | ascii string | 디지털 카메라의 제조사. Exif표준에서 이 항목은 선택적이나 DCF명세에서는 필수항목이다. | ||||||||||||||||||||||||||||
| 0x0110 | Model | ascii string | 디지털 카메라의 모델명. Exif표준에서 이 항목은 선택적이나 DCF명세에서는 필수항목이다. | ||||||||||||||||||||||||||||
| 0x0112 | Orientation | unsigned short | 1 |
| |||||||||||||||||||||||||||
| 0x011a | XResolution | unsigned rational | 1 | 이미지의 Display/Print 해상도. 기본 값은 1/72인치이나 PC에서는 표시/인쇄시 이 값을 사용하지 않으므로 의미는 없다. | |||||||||||||||||||||||||||
| 0x011b | YResolution | unsigned rational | 1 | ||||||||||||||||||||||||||||
| 0x0128 | ResolutionUnit | unsigned short | 1 | XResolution(0x011a)/YResolution(0x011b)의 단위. '1'은 단위 없음, '2':inch, '3':cm. 기본값은 '2'(inch). | |||||||||||||||||||||||||||
| 0x0131 | Software | ascii string | 펌웨어 버전 | ||||||||||||||||||||||||||||
| 0x0132 | DateTime | ascii string | 20 | 마지막 수정 날짜/시간. "YYYY:MM:DD HH:MM:SS"+0x00, 총 20바이트. 디지털 카메라의 시계가 없거나 설정되지 않은 상태라면 이 필드는 space문자로 채워진다. 보통 DateTimeOriginal(0x9003)값과 동일하다. | |||||||||||||||||||||||||||
| 0x013e | WhitePoint | unsigned rational | 2 | 이미지상의 백색 점의 색도. 이미지가 CIE Standard Illumination D65(주광-daylight)를 사용한다면 이 값은 '3127/10000,3290/10000'이다. | |||||||||||||||||||||||||||
| 0x013f | PrimaryChromaticities | unsigned rational | 6 | Defines chromaticity of the primaries of the image. If the image uses CCIR Recommendation 709 primaries, values are '640/1000,330/1000,300/1000,600/1000,150/1000,0/1000'. | |||||||||||||||||||||||||||
| 0x0211 | YCbCrCoefficients | unsigned rational | 3 | When image format is YCbCr, this value shows a constant to translate it to RGB format. In usual, values are '0.299/0.587/0.114'. | |||||||||||||||||||||||||||
| 0x0213 | YCbCrPositioning | unsigned short | 1 | When image format is YCbCr and uses 'Subsampling'(cropping of chroma data, all the digicam do that), defines the chroma sample point of subsampling pixel array. '1' means the center of pixel array, '2' means the datum point. | |||||||||||||||||||||||||||
| 0x0214 | ReferenceBlackWhite | unsigned rational | 6 | Shows reference value of black point/white point. In case of YCbCr format, first 2 show black/white of Y, next 2 are Cb, last 2 are Cr. In case of RGB format, first 2 show black/white of R, next 2 are G, last 2 are B. | |||||||||||||||||||||||||||
| 0x8298 | Copyright | ascii string | 저작권 정보 | ||||||||||||||||||||||||||||
| 0x8769 | ExifOffset | unsigned long | 1 | Exif Sub IFD의 주소 | |||||||||||||||||||||||||||
| Tag No. | Tag Name | Format | CompoNo | Desc. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x829a | ExposureTime | unsigned rational | 1 | 노출 시간(셔터스피드) 단위는 초. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x829d | FNumber | unsigned rational | 1 | 촬영시 F-값 (조리개값) | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x8822 | ExposureProgram | unsigned short | 1 | 카메라의 촬영 모드. 1:Manual, 2:Program Normal, 3:Aperture Priority(Av-조리개우선), 4: Shutter Priority(Tv-셔터스피드우선), 5:Program Creative(Slow Program), 6:Program Action(high-speed Program), 7:Portrait Mode, 8:Landscape Mode | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x8827 | ISOSpeedRatings | unsigned short | 2 | ISO 감도 | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9000 | ExifVersion | undefined | 4 | Exif 버전. 4바이트의 ASCII문자열로 저장된다. Exif2.1 = "0210". 데이터형이 undefined이므로 문자열의 끝을 알리는 0x00문자는 없다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9003 | DateTimeOriginal | ascii string | 20 | 촬영된 날짜/시간. 이 값은 사용자가 변경해서는 안된다. 형태는 "YYYY:MM:DD HH:MM:SS"+0x00으로, 총 20바이트이다. 디지털 카메라에 시계가 없거나 설정되지 않았으면 space문자로 채워진다. Exif표준에는 이 항목은 선택적이나 DCF에서는 필수항목이다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9004 | DateTimeDigitized | ascii string | 20 | 디지털화된 날짜/시간. 보통 DateTimeOriginal(0x9003)과 같은 값이다. 형태는 "YYYY:MM:DD HH:MM:SS"+0x00으로, 총 20바이트이다. 디지털 카메라에 시계가 없거나 설정되지 않았으면 space문자로 채워진다. Exif표준에는 이 항목은 선택적이나 DCF에서는 필수항목이다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9101 | ComponentsConfiguration | undefined | 픽셀 데이터의 순서. RGB:'0x04,0x05,0x06,0x00', YCbCr:'0x01,0x02,0x03,0x00'. 0x00:존재하지 않음, 0x01:Y, 0x02:Cb, 0x03:Cr, 0x04:Red, 0x05:Green, 0x06:Blue. | ||||||||||||||||||||||||||||||||||||||||||||||||
| 0x9102 | CompressedBitsPerPixel | unsigned rational | 1 | JPEG의 압축률(근사값) | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9201 | ShutterSpeedValue | signed rational | 1 | APEX단위의 셔터스피드값. 일반적인 셔터스피드 값으로 변환하기 위해서는 2승수로 계산하여 1/n으로 변환하면 된다. 예를 들어 이 값이 '4'라면 셔터스피드는 1/(24)=1/16초 이다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9202 | ApertureValue | unsigned rational | 1 | APEX단위의 F값. 일반적인 F값으로 변환하기 위해서는 √2(=1.4142)의 승수로 계산하면 된다. 예를 들어, 이 값이 '5'라면, F값은 1.41425 = F5.6이다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9203 | BrightnessValue | signed rational | 1 | APEX단위의 밝기. 일반적인 밝기값(Bv)에서 노출값(Ev)으로 계산하기 위해서는 민감도값(SensitivityValue, Sv)값을 더해주어야 한다. Ev=Bv+Sv Sv=log2(ISOSpeedRating/3.125) ISO100:Sv=5, ISO200:Sv=6, ISO400:Sv=7, ISO125:Sv=5.32. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9204 | ExposureBiasValue | signed rational | 1 | APEX단위의 노출 보정값. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9205 | MaxApertureValue | unsigned rational | 1 | 렌즈의 최대 밝기. F값으로 변환하기 위해서는 √2의 승수로 계산할 수 있다.(ApertureValue:0x9202 계산법과 동일). | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9206 | SubjectDistance | signed rational | 1 | 초점거리. 단위는 m | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9207 | MeteringMode | unsigned short | 1 | 측광방식. 0:unknown, 1:평균, 2:중앙, 3:스팟, 4:멀티스팟, 5:멀티 세그먼트, 6:분할, 255:그 외 | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9208 | LightSource | unsigned short | 1 | 광원. 실제적으로는 화이트밸런스 설정. 0:unknown, 1:주광, 2:형광등, 3:텅스텐, 10:플래쉬, 17:Standard light A, 18:Standard Light B, 19:Standard Light C, 20:D55, 21:D65, 22:D75, 255:그 외 | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x9209 | Flash | unsigned short | 1 | 0:플래쉬 발광하지 않음, 2:플래쉬 발광, 5:플래쉬 발광되었으나 반사광 감지되지 않음, 7:플래쉬 발광되고, 반사광 감지됨 | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x920a | FocalLength | unsigned rational | 1 | 촬영시 렌즈의 초점거리. 단위는 mm | |||||||||||||||||||||||||||||||||||||||||||||||
| 0x927c | MakerNote | undefined | 제조사 정의 데이터. 이 영역에서는 IFD포맷이 사용된다. | ||||||||||||||||||||||||||||||||||||||||||||||||
| 0x9286 | UserComment | undefined | 사용자 코멘트. 이 태그는 2byte문자나 유니코드가 허용된다. 첫 8바이트는 문자코드가 저장된다. JIS는 일본어 문자 코드이다.(Kanji로 알려져 있음) '0x41,0x53,0x43,0x49,0x49,0x00,0x00,0x00':ASCII '0x4a,0x49,0x53,0x00,0x00,0x00,0x00,0x00':JIS '0x55,0x4e,0x49,0x43,0x4f,0x44,0x45,0x00':Unicode '0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00':Undefined | ||||||||||||||||||||||||||||||||||||||||||||||||
| 0x9290 | SubsecTime | ascii string | 몇몇 디지털 카메라는 초당 2장에서 30장의 사진을 찍을 수 있으나 DateTime/DateTimeOriginal/DateTimeDigitized 태그는 밀리초를 표시하지 못하기 때문에 그 값을 저장하기 위해서 사용된다. 예를 들어, DateTimeOriginal = "1996:09:01 09:15:30", SubSecTimeOriginal = "130"이면, 실제 시간은 "1996:09:01 09:15:30.130"이 된다. | ||||||||||||||||||||||||||||||||||||||||||||||||
| 0x9291 | SubsecTimeOriginal | ascii string | |||||||||||||||||||||||||||||||||||||||||||||||||
| 0x9292 | SubsecTimeDigitized | ascii string | |||||||||||||||||||||||||||||||||||||||||||||||||
| 0xa000 | FlashPixVersion | undefined | 4 | FlashFix 버전. 버전 1.0이면 "0100"이다. 데이터형이 'undefined'이므로 마지막에 0x00은 없다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0xa001 | ColorSpace | unsigned short | 1 | 컬러 스페이스 지정. DCF이미지는 sRGB이므로 이 값은 항상 '1'이며, 다른 컬러 스페이스를 사용한다면 '65535':Uncalibrated 이다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0xa002 | ExifImageWidth | unsigned short/long | 1 | 이미지 크기 | |||||||||||||||||||||||||||||||||||||||||||||||
| 0xa003 | ExifImageHeight | unsigned short/long | 1 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 0xa004 | RelatedSoundFile | ascii string | 디지털 카메라가 이미지와 연결되는 녹음기능을 지원한다면 오디오 파일명이 저장된다. | ||||||||||||||||||||||||||||||||||||||||||||||||
| 0xa005 | ExifInteroperabilityOffset | unsigned long | 1 | "ExifR98"의 확장. 자세한 사항은 알려지지 않았다. IFD포맷 데이터로의 주소이며, 현재 두개의 디렉토리 엔트리가 존재한다. 0x0001태그는 "R98"의 값을 가지며 다음 태그는 0x0002, "0100"의 값을 가진다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0xa20e | FocalPlaneXResolution | unsigned rational | 1 | CCD의 픽셀 밀도. 만약 메가픽셀의 디지털카메라에서 낮은 해상도의 사진(ex. VGA) 을 찍으면 이 값은 사진의 해상도로 저장된다. 이 경우 FocalPlaneResolution은 CCD의 실제 해상도와 일치하지 않는다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0xa20f | FocalPlaneYResolution | unsigned rational | 1 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 0xa210 | FocalPlaneResolutionUnit | unsigned short | 1 | FocalPlaneXResolution/FocalPlaneYResolution의 단위. 1:단위 없음, 2:인치, 3:cm Note:후지의 몇몇 디지털 카메라(e.g.FX2700, FX2900, Finepix4700Z/40i 등)는 이 값을 3으로 사용하며 이는 센티미터가 되어야 하나 '8.3mm?'(1/3in.?)의 단위를 사용하는것으로 보인다. 후지의 버그인가? Finepix4900Z에서 이 값은 2로 변경되었지만 여전히 실제 값과는 일치하지 않는다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0xa215 | ExposureIndex | unsigned rational | 1 | ISOSpeedRations(0x8827)과 같지만 이 태그의 데이터형은 unsigned rational이다. 오직 코닥의 디지털카메라만이 ISOSpeedRation태그 대신 이 값을 사용하지만 이유는 알 수 없다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0xa217 | SensingMethod | unsigned short | 1 | 이미지 센서 유닛의 종류. 2:1-chip color area sensor. 대부분의 디지털카메라가 이 타입이다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0xa300 | FileSource | undefined | 1 | 이미지 소스를 나타낸다. 0x03은 이미지 소스가 디지털 스틸 카메라임을 나타낸다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0xa301 | SceneType | undefined | 1 | Scene의 타입을 나타낸다. 0x01은 직접 사진을 찍은것을 나타낸다. | |||||||||||||||||||||||||||||||||||||||||||||||
| 0xa302 | CFAPattern | undefined | Color Filter Array(CFA) 패턴을 나타낸다.
필터 컬러의 CFA값은 아래와 같다;
| ||||||||||||||||||||||||||||||||||||||||||||||||
| Tag No. | Tag Name | Format | CompoNo | Desc. |
| 0x0001 | InteroperabilityIndex | Ascii string | 4 | 이 IFD가 메인 이미지의 IFD라면 ExifR98 v1.0과 같은 "R98"이며, 썸네일의 IFD라면 값은 "THM"이 된다.. |
| 0x0002 | InteroperabilityVersion | Undefined | 4 | interoperability 버전. "0100"은 v1.00을 나타낸다. |
| 0x1000 | RelatedImageFileFormat | Ascii string | any | 이미지 파일의 파일 포맷이며 ASCII 문자열이다. (e.g. "Exif JPEG Ver. 2.1"). |
| 0x1001 | RelatedImageWidth | Short or Long | 1 | 이미지 크기 |
| 0x1001 | RelatedImageLength | Short or Long | 1 | |
| Tag No. | Tag Name | Format | CompoNo | Desc. |
| 0x0100 | ImageWidth | unsigned short/long | 1 | 썸네일 이미지의 크기 |
| 0x0101 | ImageLength | unsigned short/long | 1 | |
| 0x0102 | BitsPerSample | unsigned short | 3 | 이미지가 무압축이면 각 컴포넌트는 각 픽셀의 비트수를 나타낸다. 보통 '8,8,8'이다. |
| 0x0103 | Compression | unsigned short | 1 | 압축 방식. 1:무압축, 6:JPEG |
| 0x0106 | PhotometricInterpretation | unsigned short | 1 | 이미지 데이터의 컬러스페이스. 1:흑백, 2:RGB, 6:YCbCr |
| 0x0111 | StripOffsets | unsigned short/long | 무압축인 경우, 이미지 데이터의 주소를 나타낸다. In some case image data is striped and this value is plural. | |
| 0x0115 | SamplesPerPixel | unsigned short | 1 | 무압축인 경우, 각 픽셀에 저장된 컴포넌트의 갯수를 나타낸다. 컬러 이미지인 경우 이 값은 '3'이 된다. |
| 0x0116 | RowsPerStrip | unsigned short/long | 1 | 이미지가 무압축이고 스트립으로 저장되었다면, 각 스트립당 몇개의 열인지를 나타낸다. 스트립되지 않았다면 이 값은 ImageLength(0x0101)와 동일하다. |
| 0x0117 | StripByteConunts | unsigned short/long | 이미지가 무압축이고 스트립으로 저장되었다면, 각 스트립의 크기(bytes)이며, 값은 반복적이다. 스트립되지 않았다면 이미지 데이터 전체의 크기이다. | |
| 0x011a | XResolution | unsigned rational | 1 | Display/Print 해상도. 대다수의 디지털 카메라는 1/72inch를 사용하지만 PC에서는 유효하지 않는다. |
| 0x011b | YResolution | unsigned rational | 1 | |
| 0x011c | PlanarConfiguration | unsigned short | 1 | 이미지가 무압축 YCbCr이라면, YCbCr데이터의 바이트 순서를 나타낸다. If value is '1', Y/Cb/Cr value is chunky format, contiguous for each subsampling pixel. If value is '2', Y/Cb/Cr value is separated and stored to Y plane/Cb plane/Cr plane format. |
| 0x0128 | ResolutionUnit | unsigned short | 1 | XResolution(0x011a)/YResolution(0x011b)의 단위. 1:인치, 2:cm |
| 0x0201 | JpegIFOffset | unsigned long | 1 | 이미지가 JPEG인 경우, JPEG데이터가 저장된 주소를 가리킨다. |
| 0x0202 | JpegIFByteCount | unsigned long | 1 | 이미지가 JPEG인 경우, JPEG데이터의 크기를 나타낸다. |
| 0x0211 | YCbCrCoefficients | unsigned rational | 3 | 이미지가 YCbCr인 경우, RGB포맷으로 변환하기 위한 상수값이 있다. 보통, '0.299/0.587/0.114'이 사용된다. |
| 0x0212 | YCbCrSubSampling | unsigned short | 2 | 이미지 포맷이 YCbCr이고, 서브샘플링(cropping of chroma data, 모든 디지털카메라가 사용함)을 사용하는 경우, 이 값은 얼마나 많은 채도 데이터가 서브샘플링 되었는지 나타낸다. 첫번째 값은 수평, 다음 값은 수직 샘플링율이다. |
| 0x0213 | YCbCrPositioning | unsigned short | 1 | 이미지 포맷이 YCbCr이고, 서브샘플링(cropping of chroma data, 모든 디지털카메라가 사용함), 이 값은 서브샘플링 픽셀 배열에서 채도 샘플 포인트를 나타낸다. 1:픽셀의 중간, 2:datum point(0,0) |
| 0x0214 | ReferenceBlackWhite | unsigned rational | 6 | Shows reference value of black point/white point. In case of YCbCr format, first 2 show black/white of Y, next 2 are Cb, last 2 are Cr. In case of RGB format, first 2 show black/white of R, next 2 are G, last 2 are B. |
| Tag No. | Tag Name | Format | CompoNo | Desc. |
| 0x00fe | NewSubfileType | unsigned long | 1 | |
| 0x00ff | SubfileType | unsigned short | 1 | |
| 0x012d | TransferFunction | unsigned short | 3 | |
| 0x013b | Artist | ascii string | ||
| 0x013d | Predictor | unsigned short | 1 | |
| 0x0142 | TileWidth | unsigned short | 1 | |
| 0x0143 | TileLength | unsigned short | 1 | |
| 0x0144 | TileOffsets | unsigned long | ||
| 0x0145 | TileByteCounts | unsigned short | ||
| 0x014a | SubIFDs | unsigned long | ||
| 0x015b | JPEGTables | undefined | ||
| 0x828d | CFARepeatPatternDim | unsigned short | 2 | |
| 0x828e | CFAPattern | unsigned byte | ||
| 0x828f | BatteryLevel | unsigned rational | 1 | |
| 0x83bb | IPTC/NAA | unsigned long | ||
| 0x8773 | InterColorProfile | undefined | ||
| 0x8824 | SpectralSensitivity | ascii string | ||
| 0x8825 | GPSInfo | unsigned long | 1 | |
| 0x8828 | OECF | undefined | ||
| 0x8829 | Interlace | unsigned short | 1 | |
| 0x882a | TimeZoneOffset | signed short | 1 | |
| 0x882b | SelfTimerMode | unsigned short | 1 | |
| 0x920b | FlashEnergy | unsigned rational | 1 | |
| 0x920c | SpatialFrequencyResponse | undefined | ||
| 0x920d | Noise | undefined | ||
| 0x9211 | ImageNumber | unsigned long | 1 | |
| 0x9212 | SecurityClassification | ascii string | 1 | |
| 0x9213 | ImageHistory | ascii string | ||
| 0x9214 | SubjectLocation | unsigned short | 4 | |
| 0x9215 | ExposureIndex | unsigned rational | 1 | |
| 0x9216 | TIFF/EPStandardID | unsigned byte | 4 | |
| 0xa20b | FlashEnergy | unsigned rational | 1 | |
| 0xa20c | SpatialFrequencyResponse | unsigned short | 1 | |
| 0xa214 | SubjectLocation | unsigned short | 1 | |
Appendix 1: 올림푸스 디지털 카메라의 MakerNote
이 데이터는 Peter Esherick이 올림푸스 D450Z(C-920Z)에서 분석하였다.올림푸스 디지털 카메라의 MakerNote는 ASCII 문자열 "OLYMP"로 시작한다. 데이터 포맷은 IFD와 동일하지만 주소는 0x07에서 시작한다. 예를들어 아래와 같다.
:0000: 4F 4C 59 4D 50 00 01 00-0B 00 00 02 04 00 03 00 OLYMP...........
:0010: 00 00 0E 04 00 00 01 02-03 00 01 00 00 00 03 00 ................
| Tag No. | Tag Name | Format | CompoNo | Value |
| 0x0200 | SpecialMode | Unsigned Long | 3 | 촬영 모드. 0:normal, 1:unknown, 2:fast, 3:panorama. 두번째 값은 순번이며, 세번째 값은 파노라마 방향이다. 1:왼쪽에서 오른쪽, 2:오른쪽에서 왼쪽, 3:아래에서 위, 4:위에서 아래 |
| 0x0201 | JpegQual | Unsigned Short | 1 | JPEG 품질. 1=SQ,2=HQ,3=SHQ. |
| 0x0202 | Macro | Unsigned Short | 1 | 매크로 모드 사용 여부. 0=normal, 1=macro. |
| 0x0203 | Unknown | Unsigned Short | 1 | Unknown |
| 0x0204 | DigiZoom | Unsigned Rational | 1 | 디지털 줌 배율. 0=normal, 2=digital 2x zoom. |
| 0x0205 | Unknown | Unsigned Rational | 1 | Unknown |
| 0x0206 | Unknown | Signed Short | 6 | Unknown |
| 0x0207 | SoftwareRelease | Ascii string | 5 | 펌웨어 버전 |
| 0x0208 | PictInfo | Ascii string | 52 | ASCII포맷의 데이터. 이 포맷은 Exif를 사용하지 않는 구형 올림푸스 디지털 카메라(C1400/C820/D620/D340 등)의 데이터 포맷과 같다. |
| 0x0209 | CameraID | Undefined | 32 | 미상의 유틸리티를 사용하여 변경할 수 있는 CameraID 데이터 |
| 0x0f00 | DataDump | Unsigned Long | 30 | Unknown |
Appendix 2: 니콘의 MakerNote
니콘의 MakerNote는 두가지 포맷이 있다. E700/E800/E900/E900S/E910/E950의 MakerNote는 ASCII 문자열 "Nikon"로 시작한다. 데이터 포맷은 IFD와 동일하지만 주소는 0x08부터 시작한다. 이는 올림푸스 MakerNote와 ASCII문자열을 제외하고는 동일하다. 실제 구조는 아래와 같다.:0000: 4E 69 6B 6F 6E 00 01 00-05 00 02 00 02 00 06 00 Nikon...........
:0010: 00 00 EC 02 00 00 03 00-03 00 01 00 00 00 06 00 ................
| Tag No. | Tag Name | Format | CompoNo | Value |
| 0x0002 | Unknown | Ascii string | 6 | Unknown. E900/E900S/E910:"09.41", others:"08.00". |
| 0x0003 | Quality | Unsigned short | 1 | 화질 설정. E900에서, 1:VGA Basic, 2:VGA Normal, 3:VGA Fine, 4:SXGA Basic, 5:SXGA Normal, 6:SXGA Fine |
| 0x0004 | Color Mode | Unsigned short | 1 | 1:Color, 2:Monochrome. |
| 0x0005 | Image Adjustment | Unsigned short | 1 | 0:Normal, 1:Bright+, 2:Bright-, 3:Contrast+, 4:Contrast-. |
| 0x0006 | CCD Sensitivity | Unsigned short | 1 | 0:ISO80, 2:ISO160, 4:ISO320, 5:ISO100 |
| 0x0007 | White balance | Unsigned short | 1 | 0:Auto, 1:Preset, 2:Daylight, 3:Incandescense, 4:Fluorescence, 5:Cloudy, 6:SpeedLight |
| 0x0008 | Focus | Unsigned rational | 1 | 무한대 초점이라면 값은 '1/0'이다. |
| 0x0009 | Unknown | Ascii string | 20 | Unknown |
| 0x000a | Digital Zoom | Unsigned rational | 1 | '160/100'은 1.6x디지털 줌을 의미하며 '0/100'은 디지털 줌 미사용을 뜻한다. |
| 0x000b | Converter | Unsigned short | 1 | 어안 컨버터가 사용되었다면 '1' |
| 0x0f00 | Unknown | Unsigned long | 25~30 | Unknown |
E990에서는 ASCII문자열이 없다. IFD(e.g. IFD0, SubIFD)와 동일하게 첫번째 바이트에서 데이터가 시작된다. 니콘 D1도 이 포맷을 사용한다. 실제 데이터는 아래 모양과 같다.
:0000: 10 00 01 00 07 00 04 00-00 00 00 01 00 00 02 00 ................
:0010: 03 00 02 00 00 00 00 00-64 00 03 00 02 00 06 00 ........d.......
아래 데이터는 Max Lyons 가 분석하였음.
| Tag No. | Tag Name | Format | CompoNo | Value |
| 0x0001 | Unknown | Undefined | 4 | Unknown. 항상 "0100". version? |
| 0x0002 | ISO Setting | Unsigned short | 2 | 0,100=ISO 100 0,200=ISO200 0,400=ISO400 etc. |
| 0x0003 | Color Mode | Ascii string | varies | "COLOR", "B&W" |
| 0x0004 | Quality | Ascii string | varies | "NORMAL", "FINE", "BASIC" |
| 0x0005 | Whitebalance | Ascii string | varies | "AUTO", "WHITE PRESET" etc. |
| 0x0006 | Image Sharpening | Ascii string | varies | "AUTO", "HIGH" etc. |
| 0x0007 | Focus Mode | Ascii string | varies | "AF-S" means Single AF, "AF-C" means Continuous AF. |
| 0x0008 | Flash Setting | Ascii string | varies | "NORMAL", "RED-EYE" etc. |
| 0x000a | Unknown | Unsigned rational | 1 | Unknown, Always '8832/1000'? |
| 0x000f | ISO Selection | Ascii string | varies | "MANUAL":User selected, "AUTO":Automatically selected. |
| 0x0080 | Image Adjustment | Ascii string | varies | "AUTO", "NORMAL", "CONTRAST(+)" etc. |
| 0x0082 | Adapter | Ascii string | varies | "OFF", "FISHEYE 2", "WIDE ADAPTER" etc. |
| 0x0085 | Manual Focus Distance | Unsigned rational | 1 | MF인 경우 초점 거리(m). 그 외는 0이다. |
| 0x0086 | Digital Zoom | Unsigned rational | 1 | '100/100' means no digital zoom (optical zoom only), '140/100' means 1.4x digital zoom. |
| 0x0088 | AF Focus Position | Undefined | 4 | '0,0,0,0':Center, '0,1,0,0':Top, '0,2,0,0':Bottom, '0,3,0,0':Left, '0,4,0,0':right |
| 0x0010 | Data Dump | Undefined | 174 | Unknown. |
Appendix 3: 카시오의 MakerNote
카시오는 QV2000/QV8000에서부터 Exif포맷을 사용하기 시작했다. 카시오의 MakerNote는 일반적인 IFD와 같다. 실제 데이터 구조는 아래와 같다.
:0000: 00 14 00 01 00 03 00 00-00 01 00 0A 00 00 00 02 ................
:0010: 00 03 00 00 00 01 00 03-00 00 00 03 00 03 00 00 ................
아래 데이터는 Eckhard Henkel 가 분석하였다.| Tag No. | Tag Name | Format | CompoNo | Value |
| 0x0001 | RecordingMode | Unsigned Short | 1 | 1:Single Shutter, 2:Panorama, 3:Night Scene, 4:Portrait, 5:Landscape |
| 0x0002 | Quality | Unsigned Short | 1 | 1:Economy, 2:Normal, 3:Fine |
| 0x0003 | Focusing Mode | Unsigned Short | 1 | 2:Macro, 3:Auto Focus, 4:Manual Focus, 5:Infinity |
| 0x0004 | Flash Mode | Unsigned Short | 1 | 1:Auto, 2:On, 3:Off, 4:Red Eye Reduction |
| 0x0005 | Flash Intensity | Unsigned Short | 1 | 11:Weak, 13:Normal, 15:Strong |
| 0x0006 | Object distance | Unsigned Long | 1 | Object distance in [mm] |
| 0x0007 | White Balance | Unsigned Short | 1 | 1:Auto, 2:Tungsten, 3:Daylight, 4:Fluorescent, 5:Shade, 129:Manual |
| 0x0008 | Unknown | Unsigned short | 1 | Unknown |
| 0x0009 | Unknown | Unsigned short | 1 | Unknown |
| 0x000a | Digital Zoom | Unsigned Long | 1 | 0x10000(65536):'Off', 0x10001(65537):'2X Digital Zoom' |
| 0x000b | Sharpness | Unsigned Short | 1 | 0:Normal, 1:Soft, 2:Hard |
| 0x000c | Contrast | Unsigned Short | 1 | 0:Normal, 1:Low, 2:High |
| 0x000d | Saturation | Unsigned Short | 1 | 0:Normal, 1:Low, 2:High |
| 0x000e | Unknown | Unsigned short | 1 | Unknown |
| 0x000f | Unknown | Unsigned short | 1 | Unknown |
| 0x0010 | Unknown | Unsigned short | 1 | Unknown |
| 0x0011 | Unknown | Unsigned long | 1 | Unknown |
| 0x0012 | Unknown | Unsigned short | 1 | Unknown |
| 0x0013 | Unknown | Unsigned short | 1 | Unknown |
| 0x0014 | CCD Sensitivity | Unsigned short | 1 | QV3000: 64:Normal, 125:+1.0, 250:+2.0, 244:+3.0 QV8000/2000: 80:Normal, 100:High |
Appendix 4: 후지의 MakerNote
후지는 MakerNote를 2000년대 모델(e.g. FinePix1400, FinePix4700)에서부터 추가하였다. IFD포맷을 사용하며 ASCII문자열 FUJIFILM으로 시작하며 다음 4바이트(0x000C)가 첫번째 IFD엔트리의 주소를 나타낸다. 실제 데이터의 구조는 아래와 같다.
:0000: 46 55 4A 49 46 49 4C 4D-0C 00 00 00 0F 00 00 00 :0000: FUJIFILM........
:0010: 07 00 04 00 00 00 30 31-33 30 00 10 02 00 08 00 :0010: ......0130......
다른 제조사와는 두가지의 큰 차이가 있다.
- 후지의 Exif데이터는 Motorola 오더를 사용하더라도 MakerNote는 Intel 오더를 사용한다.
- 다른 제조사는 주소값을 나타낼때 TIFF헤더의 첫번째 바이트부터 계산(다른 IFD와 마찬가지로)하나, 후지는 MakerNote자체 시작점부터 계산한다.
| Tag No. | Tag Name | Format | CompoNo | Value |
| 0x0000 | Version | Undefined | 4 | MakerNote의 버전. 현재는 "0130". |
| 0x1000 | Quality | Ascii string | 8 | 품질. ASCII문자열 "BASIC","NORMAL","FINE" |
| 0x1001 | Sharpness | Unsigned Short | 1 | Sharpness 설정. 1or2:soft, 3:normal, 4or5:hard. |
| 0x1002 | White Balance | Unsigned Short | 1 | White balance setting. 0:Auto, 256:Daylight, 512:Cloudy, 768:DaylightColor-fluorescence, 769:DaywhiteColor-fluorescence, 770:White-fluorescence, 1024:Incandenscense, 3840:Custom white balance. |
| 0x1003 | Color | Unsigned Short | 1 | Chroma saturation setting. 0:normal(STD), 256:High, 512:Low(ORG). |
| 0x1004 | Tone | Unsigned Short | 1 | Contrast setting. 0:normal(STD), 256:High(HARD), 512:Low(ORG). |
| 0x1010 | Flash Mode | Unsigned Short | 1 | Flash firing mode setting. 0:Auto, 1:On, 2:Off, 3:Red-eye reduction. |
| 0x1011 | Flash Strength | Signed Rational | 1 | Flash firing strength compensation setting. Unit is APEX(EV) and value is -6/10, -3/10, 0/10, 3/10, 6/10 etc. |
| 0x1020 | Macro | Unsigned Short | 1 | Macro mode setting. 0:Off, 1:On. |
| 0x1021 | Focus mode | Unsigned short | 1 | Focusing mode setting. 0:Auto focus, 1:Manual focus. |
| 0x1030 | SlowSync. | Unsigned short | 1 | Slow synchro mode setting. 0:Off, 1:On. |
| 0x1031 | Picture Mode | Unsigned short | 1 | Picture mode setting. 0:Auto, 1:Portrait scene, 2:Landscape scene, 4:Sports scene, 5:Night scene, 6:Program AE, 256:Aperture prior AE, 512:Shutter prior AE, 768:Manual exposure. |
| 0x1032 | unknown | Unsigned Short | 1 | Unknown |
| 0x1100 | ContTake/Bracket | Unsigned Short | 1 | 연사 또는 브라케팅 설정. 0:off, 1:on. |
| 0x1200 | unknown | Unsigned Short | 1 | Unknown |
| 0x1300 | Blur warning | Unsigned Short | 1 | Blur warning status. 0:No blur warning, 1:Blur warning. |
| 0x1301 | Focus warning | Unsigned short | 1 | AF 경고. 0:Auto Focus good, 1:Out of focus. |
| 0x1302 | AE warning | Unsigned short | 1 | 자동노출 경고. 0:AE good, 1:Over exposure (>1/1000s,F11). |
Appendix 5: 캐논의 MakerNote
아래 데이터는 David Burren 에 의해 분석되었으며, 원본은 아래 주소에서 볼 수 있다: http://www.burren.cx/david/canon.html. 변경사항이 있다면 David에게 메일을 보내기 바란다.이 문서는 그의 Rev.1.11(2001/01/30)을 기본으로 하였다.
캐논의 MakerNote는 IFD 포맷을 사용한다. 시작 주소는 0이다.
아래 태그중 일부는 EOS D30에서만 작성되지만 (조사해본 바로는) 모든 캐논 디지털 카메라(A50모델 이후)에서 유효하다. 태그를 찾을 수 없거나, 여기 명시된 것보다 적다면 단지 카메라에서 지원되지 않는 것이다.
| Tag No. | Tag Name | Format | CompoNo | Value | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0x0 | Unknown | Unsigned Short | 6 | Always 0 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x1 | Unknown | Unsigned Short | varies |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x3 | Unknown | Unsigned Short | 4 | unknown | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x4 | Unknown | Unsigned Short | varies |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x6 | Image type | Ascii string | 32 | e.g.: "IMG:EOS D30 JPEG" Has trailing whitespace. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x7 | Firmware version | Ascii string | 24 | May have trailing NULs and whitespace. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x8 | Image Number | Unsigned Long | 1 | Normally reported as FFF-XXXX. FFF is this value divided by 1000, XXXX is this value mod 1000. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x9 | Owner name | Ascii string | 32 | May have trailing NULs and whitespace. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0xa | Unknown | Unsigned Short | varies | unknown | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0xc | Camera serial number | Unsigned Long | 1 | High 16 bits are printed as a 4-digit hex number. Low 16 bits are printed as a 5-digit decimal number. These are concatenated to form the serial number. Example printf() format string would be "%04X%05d". | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0xd | Unknown | Unsigned Short | varies | unknown | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0xf | Custom Functions | Unsigned Short | varies | First short is the number of bytes in the tag (i.e. twice the number of shorts) For each other value: the top 8 bits are the C.Fn number, and the lower 8 bits are the value. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
EOS D30 Custom Functions
| C.Fn | Name | Value |
|---|---|---|
| 1 | Long exposure noise reduction | 0: Off 1: On |
| 2 | Shutter/AE-lock buttons | 0: AF/AE lock 1: AE lock/AF 2: AF/AF lock 3: AE+release/AE+AF |
| 3 | Mirror lockup | 0: Disable 1: Enable |
| 4 | Tv/Av and exposure level | 0: 1/2 stop 1: 1/3 stop |
| 5 | AF-assist light | 0: On (auto) 1: Off |
| 6 | Shutter speed in Av mode | 0: Automatic 1: 1/200 (fixed) |
| 7 | AEB sequence/auto cancellation | 0: 0, -, + / Enabled 1: 0, -, + / Disabled 2: -, 0, + / Enabled 3: -, 0, + / Disabled |
| 8 | Shutter curtain sync | 0: 1st-curtain sync 1: 2nd-curtain sync |
| 9 | Lens AF stop button Fn. Switch | 0: AF stop 1: Operate AF 2: Lock AE and start timer |
| 10 | Auto reduction of fill flash | 0: Enable 1: Disable |
| 11 | Menu button return position | 0: Top 1: Previous (volatile) 2: Previous |
| 12 | SET button func. when shooting | 0: Not assigned 1: Change quality 2: Change ISO speed 3: Select parameters |
| 13 | Sensor cleaning | 0: Disable 1: Enable |
변경 이력
rev. 1.4
- Added Makernote of Canon
- Added Color/Tone TAGs to Fujifilm's makernote
rev. 1.3
- Added Exif2.1 specification
- Added Makernote of Fujifilm
rev. 1.2
- Added DCF specification
- Added Interoperability IFD
- Added Makernote of Nikon/Casio
rev. 1.1
- Added byte align explanation to TAG Mark of TIFF header
- Corrected data format of some TAGs to "unsigned short/long"
- Corrected value of FocalPlaneResolutionUnit
- Added Appendix 1: MakerNote of Olympus
rev. 1.0
- First release
Acknowledgement
I would like to thank to;Daniel Switkin: Byte align of TAG Mark, Format of ImageWidth/ImageLength
Peter Esherick: MakerNote of Olympus
Matthias Wandel: Value of FocalPlaneResolutionUnit
Max Lyons: Makernote of Nikon ...His webpage
Eckhard Henkel: Makernote of Casio ...His webpage
David Burren: FocalPlaneResolutionUnit of Fujifilm's / Makernote of Canon ...His webpage
728x90
반응형