2008-09-09 4 views
11

전체 파일을 메모리에 읽지 않고도 이미지의 형식을 확인하는 좋은 방법이 있습니까?전체 파일을 읽지 않고 파일의 이미지 형식을 추측 할 수 있습니까?

분명히 이것은 형식에 따라 달라질 수 있습니다 (특히 TIFF 파일에 관심이 있습니다).하지만 전체 파일을 읽지 않고도 파일 형식이 어떤 이미지 형식인지 확인하는 데 어떤 절차가 유용할까요?

보너스 : 이미지가 Base64로 인코딩 된 문자열 일 경우 어떻게해야합니까? 그것을 디코딩하기 전에 그것을 추론 할 수있는 확실한 방법은 없을까요?

답변

17

대부분의 이미지 파일 형식은 시작할 때 고유 바이트를 갖습니다. unix file 명령은 파일의 시작 부분을보고 어떤 유형의 데이터가 포함되어 있는지 확인합니다. Magic numbers in filesmagicdb.org에 관한 위키 백과 문서를 참조하십시오.

+2

끝에 마술 번호가있는 Targa와 TIFF와 완전히 구별 할 수없는 RAW의 맛을 제외하고는 디코딩하지 않습니다 (또는 그 반대). – plinth

0

* nix 명령 줄에 file 또는 파일의 초기 바이트를 읽습니다. 대부분의 파일에는 처음 몇 바이트에 고유 헤더가 있습니다. 예를 들어 TIFF의 헤더는 다음과 같습니다.

0x00000000: 4949 2a00 0800 0000
TIFF 파일 형식에 대한 자세한 내용은 해당 바이트의 의미를 알고 싶으면 here을 참조하십시오. II 또는 MM (인텔 바이트 순서 또는 Motorolla) 중 하나와 함께 시작됩니다

http://www.wotsit.org

+2

Yikes "something like"는 위험합니다. 두 개의 올바른 tiff 헤더가 있습니다 : 49 49 2a 2a 또는 4d 4d 00 2a. 49 49 형식은 대부분의 파일을 통해 인텔 바이트 순서 (리틀 엔디안)를 사용하며, 4d 4d는 모토로라 바이트 (빅 엔디안)를 사용합니다. 이는 2a 및 00이 인텔에서 반대로됨을 의미합니다. – plinth

0

종합 사이트에서 확인할 수있다.
TIFF 6 사양은 here을 다운로드 할 수 있으며 따르기가 너무 어렵지 않습니다.

4

있는지 확인하십시오. 다른 사람들이 언급 한 것처럼 대부분의 이미지는 일종의 'Magic'으로 시작합니다. 'Magic'은 항상 Base64 데이터로 변환됩니다. 다음은 몇 가지 예는 다음과 같습니다

비트 맵은 /9j/

GIF 파일이 (즉, 두 번째 문자로 제로의) R0l 시작됩니다 시작됩니다 Qk3

은 JPEG와 함께 시작됩니다.

등등. 다른 이미지 유형을 사용하여 인코딩 할 내용을 파악하는 것이 어렵지 않습니다. 조심하십시오. 일부는 여러 마법을 가지고 있기 때문에 B64 '번역 코드'에서 설명해야합니다.

관련 문제