2012-12-13 4 views
4

이미지의 EXIF ​​정보를 원격으로 가져올 수 있으며 EXIF ​​데이터 만 다운로드 할 수 있습니까?전체 이미지를 다운로드하지 않고 EXIF ​​데이터 가져 오기 - Python

내가 이해할 수있는 내용은 EXIF bytes in image files에서 EXIF ​​데이터는 이미지의 처음 몇 바이트에 있습니다.

그래서 파이썬으로 원격 파일의 처음 몇 바이트 만 다운로드하는 방법이 궁금합니다. (편집 : HTTP 범위 헤더를 사용하면 충분하지 않습니다. 모든 원격 호스트에서 지원되기 때문에 전체 다운로드가 가능합니다.)

예를 들어 x 바이트의 진행 후에 다운로드를 취소 할 수 있습니까?

답변

2

이것은 이미지 형식에 따라 크게 달라질 수 있습니다. 예를 들어, TIFF 파일이있는 경우 EXIF ​​데이터가있는 경우 파일 내에있는 선험적 정보를 알 수 없습니다. 그것은 머리글 직후와 첫 번째 IFD 이전 일 수 있지만, 이것은있을 법하지 않습니다. 그것은 이미지 데이터 이후 일 수 있습니다. 중간에 어딘가에있을 가능성이 있습니다.

EXIF ​​정보를 원한다면 서버 (캐시, 어쩌면)에서 압축을 풀고 요구하는 클라이언트 코드 대신 그 패키지를 멋지게 포장하십시오.

+2

두 번째 단락은 이미지를 저장하는 서버를 소유하고 있다고 가정합니다. 반드시 그렇지는 않습니다. EXIF ​​데이터의 위치는 [이 답변] (http://stackoverflow.com/a/8227753)을 이해하면됩니다./1110381) 올바르게, JPG 파일에서 EXIF ​​데이터는 파일의 시작 부분 주위에있을 것입니다 - 이것이 맞는지 압니까? – l4mpi

+0

네, 저도 같은 생각이 듭니다. 대부분의 이미지는 .jpg로되어 있으므로 좋을 것입니다. – knutole

+0

APP1 섹션이 APP0 섹션 다음에 나타납니다 (있는 경우). APP0 마커는 사양에 따라 최대 64K의 데이터가 따라 올 수 있으므로이를 처리 할 준비가되어 있어야합니다. 그리고 여러 개의 APP1 섹션이있을 수 있습니다. 그것은 나 였고 나는이 일을 할 때 지옥에 빠졌고 어떤 지점에서든 이미지 전달을 차단할 수있는 스트림 솔루션을 만들었습니다 (이 경우 EXIF가있는 경우). – plinth

4

HTTP range header을 설정하여 파일의 일부만 보내도록 웹 서버에 지시 할 수 있습니다. 부분적으로 파일을 다운로드하려면 urllib을 사용하는 예를 보려면 This answer을 참조하십시오. 그래서 예를 들어 덩어리를 다운로드 할 수 있습니다. 1000 바이트, exif 데이터가 청크에 포함되어 있는지 확인하고 exif app1 헤더를 찾을 수 없거나 exif 데이터가 불완전한 경우 더 많은 데이터를 다운로드하십시오.

+0

고마워요. 그러나 이것은 범위 헤더의 원격 준수에 달려 있습니다. x 바이트 나 그 이후의 컬링을 취소 할 방법이 필요하다. – knutole

관련 문제