문제

인사말

I'm going to get exif 정보에서 몇 가지를 사용하여 이미지이다.내가 알고있는 어떤 표준 java lib 밖에 사용할 수 있는 가진 장치입니다.나이 끝까지 사용하여 하나입니다.

하지만 그동안 저장 기능은 제공하지 않고 있습니다 어떻게 이 정보를 인코딩된 내 JPG?치/는 방법 당신은 일반적으로 정보를 얻을에서 문서입니다.When I opent 는 그 문서와 텍스트 편집기의 모든 바이너리입니다.

호기심으로 어떻게 작동하며 어떻게 읽을 수도 있습 데이터에서 질문입니다.

도움이 되었습니까?

해결책

를 검색하면 문자열"Exif"당신은 시작을 찾을 수 있의 Exif 데이터-그것은 매우 복잡,그리고 권하고 싶은 라이브러리를 사용하여--(예:우리 회사의 DotImage 사용한 경우.NET).

여기에 높은 수준이 설명하지만:

Exif 자체 내부의 AppMarker--세 개의 바이트는 전 될 것입니다 E1(AppMarker1)의 크기와 마커의 데이터에서 엔디안의 파일입니다.두 바이트로 후 Exif 당신이 볼 엔디안 마커(예: 49 49 수단 II 을 의미하는 인텔은 endian--는 것을 의미하는 2 바이트수가 낮은 바이트에서 첫 번째 파일)입니다.

의 나머지 데이터를 사용한 오프셋을 광범위하게,오프셋 위치에서의 첫 endian 바이트(49 에서 위의 경우)

8 바이트에서 이러 오프셋는 2 바이트 수를 수의 exif 태그가 있습니다.에 있는 경우 II 바이트로 순,역방향의 바이트 길이를 참조하십시오.

다음이 될 것입니다 이 숫자 12 의 바이트다.각각의 하나입니다:

2 bytes: Tag ID
2 bytes: Tag Type
4 bytes: Length
4 bytes: data if the data is 4 bytes or less, or an offset to the data

후 12N 바이트를 기록,당신은 당신 데이터가 가리키는 각각한 오프셋에서 사용되는 위 N 기록합니다.당신이 필요하 id 및 형식을 그들이 무엇을 의미하고 어떻게 그들이 표현됩니다.

다른 팁

저는 조금 늦게 파티에,하지만 작성 자바 라이브러리를 처리 Exif (다른 형식의 메타데이터)나는 차습니다.

Exif

Exif 라 TIFF, 태그 이미지 파일 형식입니다.그래서 우리는 첫 번째 검토하 TIFF:

  • TIFF 문서에 포함된 여러 개 디렉토리 으로 알려진 IFDs(이미지 파일이 디렉토리)
  • 각각의 IFD 포함되어 영상 태그
  • IFDs 로 연결될 수 있는 다른 IFDs
  • 각 태그에는 숫자 ID 를 포함하거나 하나 이상의 값을 지정 데이터 형식

생각의 구조물로 나무를 기본 값에서 나뭇잎.TIFF 은 자에 대해 설명하는 구조이지만,그것은 없는 지에 대해 아무것도 어떤 값에서 나뭇잎제 .

정말 저장할 수 있습니다 어떤 종류의 데이터 TIFF,그것은 결합된 이미지입니다.

TIFF 파일은 일반적인 header:

  • 2 바이트 바이트로 주문,중 MMII ASCII.이렇게 당신이 무엇을 고려하기 위해 모든 미래의 바이트에서--LSB 또는 MSB first.
  • 2 바이트 TIFF 마커에 대한 Exif 이 0x002A
  • 4bytes 포인터가 처음 IFD

IFDs 가 동등하게 간단한 구조:

  • 2 바이트 에 대한 숫자 태그를 따르
  • N 바이트 태그에 대해 자신(N=12*tagCount)
  • 4bytes 에 대한 옵션에 포인터를 다음 IFD(사용자 가치가 없는 경우 IFD 에 연결)

태그가 있는 간단한 표현에서 12 바이트:

  • 2 바이트 태그 ID
  • 2 바이트 데이터 입력(int8u,int16s,float,etc.)
  • 4bytes 의 수에 대한 데이터 값을 지정한 종류의
  • 4bytes 값에 대한 자체,에 맞는 경우,그렇지 않으면에 대한 포인터를 다른 위치 데이터를 찾을 수 있습--이 될 수 있는 포인터 시작의 또 다른 IFD

데이터 유형은 미리 정의되어 있습니다.예를 들어:1 을 나타냅 8-bit unsigned 정수,그리고 12 나 64-bit 부동 소수점의 숫자입니다.

그래서 모두와 함께할 수 있는 가에 따라 데이터 파일이 있습니다.부:

  • 할 수 없는 데이터를 읽기 위해서,그것은 무료 링크를 통해 모든 장소입니다.해야 합니다거나 임의의 액세스,또는 다른 그것을 종합하여 버퍼링이다.
  • 당신이 알고있는 모든 이점은 태그가 가진 ID 0x1234 에는 4 개의 정수: {1,2,3,4}

디코딩하 TIFF 로 Exif,당신은 필요가 적용어 사전 정의하는 각 IFD 나타내며,각 ID 태그 내에서 그 IFDs 나타냅니다.

JPEG

대부분의 사용자의 라이브러리를 처리 JPEG 파일이 있습니다.Jpeg 파일이 완전히 다른 구조를 구성,시퀀스의 세그먼트가 있습니다.각 세그먼트 식별자 및 블록의 바이트입니다.Exif 에서 발견 APP1 (숫자 값 0xe1)세그먼트의 JPEG 파일입니다.일단 당신이 그를 건너뛰어야 합 지난 몇 주요 바이트(Exif\0\0 전)보 MMII 을 나타내는 시작 TIFF 포맷 Exif 데이터입니다.

가과 함께 모든 것을 예

여기에는 이진 덤프의 라이브러리 샘플 이미지:

기 위해서는:

JPEG 시작

  • FF D8 은 JPEG'마법수'.
  • FF 표 JPEG 세그먼트로 시작합니다.
  • E1 음을 나타냅 JPEG 세그먼트 형식( APP1, 어디 Exif 삶).
  • 18 B3 (6,323 소수)의 세그먼트의 길이(포함하여 크기를 바이트),그래서 우리가 알고 있는 모든 Exif 에 대한 데이터를 이 JPG 파일은 앉아 내에서 다음 6,321 바이트입니다.참고 JPG,multi-byte 값을 인코딩된 가공업자를 주문하지만,중첩 Exif 데이터를 사용할 수 있습 Intel 주문.
  • 45 78 69 66 00 00 또는 ASCII Exif\0\0 은 Exif preamble. APP1 지 않은 독점적으로 reseved Exif,그래서 이것을 차별.

TIFF/Exif 시작

  • 4D 4DMM 음을 나타냅 우리가공업자 바이트 주문 이 Exif 블록
  • 00 2A 은 우리의 기준 TIFF 마커로,위에서 설명한
  • 00 00 00 08 은 오프셋(8 바이트)첫 번째 IFD,상대적 TIFF 헤더(MM 이 경우).이 직접 다음 바이트 시퀀스에서 이 경우에는,비록 그것은 필요가 없습니다.

IFD 시작

  • 00 08 우리의 첫 번째 IFD 고 우리는 8 태그 오

태그의 시작

  • 01 0F 은 ID 를 위한 첫번째 태그에서 첫 번째 IFD,이 경우 제조업체의 카메라
  • 00 02 은 값의 형식(2 의 ASCII 문자열)
  • 00 00 00 16 은 구성 요소의 수를 의미하는 22 바이트 문자열
  • 00 00 01 B2 (434 소수)는 포인터의 위치에 해당 문자열을 기준으로 TIFF 헤더(MM).당신은 그것을 볼 수 없습니다 이 화면에서는,하지만 그것은 포인트를 45 41 53 54 4D 41 4E 20 4B 4F 44 41 4B 20 43 4F 4D 50 41 4E 59 00EASTMAN KODAK COMPANY ASCII

카메라는 raw 파일을(CR2/NEF/ORW...)일반적으로 사용 TIFF,그러나 그들은 대부분 다른 사용 태그를 사람들을 위한 Exif.두 번째 바이트 쌍에서 이러한 파일이 다른 것입니다 00 2A 뿐만 아니라,나타내는 유형의 TIFF 사전이라고 생각되는 부분을 적용됩니다.

Wikipedia 는 몇 가지 방법과 위치에 정확히 EXIF 데이터는 파일에 저장됩니다.물론,항상 자체를 읽습니다.

이것은 Java와 Exif를위한 훌륭한 라이브러리 중 하나입니다. http://www.drewnoakes.com/code/exif/

Exif 데이터를 구문 분석하는 것은 매우 지루하지만 많은 라이브러리를 찾을 수 있습니다. Java가 가장 좋아하는 것은

http://www.java2s.com/open-source/java-document/web-server/jigsaw/org/w3c/tools/jpeg/exif.java.htm

http://jigsaw.w3.org/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top