2010-04-02 3 views
3

JPG에서 Exif 정보를 추출하는 코드를 작성하려고합니다.JPG 세그먼트 길이 인코딩

Exif는 JPG 파일의 APP1 세그먼트에 저장됩니다.

FF E1  // APP1 segment marker 
nn nn  // Length of segment 
45   // 'E' 
78   // 'x' 
69   // 'i' 
66   // 'f' 

을 그리고 FF 또는 00 이외의 뒤에 FF이 때까지 간다 : the Exif spec에 따르면, APP1 세그먼트의 형식은 다음과 같이 시작할 예정이다.

16 진수 편집기에서 JPG를 보면 FF E1Exif 문자열을 볼 수 있지만 길이 바이트를 디코딩하는 데 문제가 있습니다. 예 : 하나의 jpg에서 내 16 진수 편집기는 APP1 세그먼트 길이가 686 바이트라고 알려주지 만 길이 바이트는 F7 C8입니다.

소수점 이하 자릿수로 686을 사용하려면 어떻게해야합니까?

편집 : 다음은 예제 파일의 첫 부분입니다 :

FF D8 FF E1 F7 C8 45 78 69 66 00 00 4D 4D 00 2A 00 00 00 08 

편집 :는 사실, 내가 여기에 무슨 일이 일어나고 있는지 알 것 같아요. APP1 세그먼트가 실제로 다른 세그먼트를 "포함"합니까? 예를 들어 썸네일 데이터가 APP1 내부에있는 것으로 간주되면 길이가 더 합리적인 것처럼 보입니다. 아무도 이것을 확인하거나 거부 할 수 있습니까?

+1

APP1 세그먼트가 63432 바이트가 아닙니까? 686이라는 걸 어떻게 알았 니? 아마도 686 크기의 작은 이미지 일 겁니다. – Gabe

+0

@gabe 새 세그먼트의 다음 'FF xx'마커 바이트를 찾았습니다. 그 맞습니까? – Blorgbeard

+0

예, FFDB가 다음 마커 (DQT)가 될 것으로 기대합니다. – Gabe

답변

3

APP1 세그먼트에는 썸네일 (링크 된 EXIF ​​문서 및 논리 페이지 12로 스크롤)이 포함되어 있으므로 686은 빨간색 청어 (아마도 썸네일까지의 바이트 수)입니다. F7C8은 DQT 세그먼트까지의 실제 바이트 수이며 축소판이 포함되어 있으므로 크기가 큽니다.

1

수 없습니다. 이러한 바이트는 686을 나타내지 않지만 길이 바이트는 "Exif"문자열보다 우선합니다.

파일을 보지 않고는 진단 할 수 없습니다. 파일의 처음 20 바이트를 게시하는 것이 좋습니다.

+0

완료, 제 편집을보세요. – Blorgbeard