2012-12-13 65 views
4

可以遠程獲取圖像的EXIF信息並僅下載EXIF數據?在不下載整個圖像的情況下獲取EXIF數據 - Python

從我所瞭解的EXIF bytes in image files中,EXIF數據位於圖像的前幾個字節中。

所以問題是如何只用Python下載遠程文件的前幾個字節? (編輯:依賴於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來告訴Web服務器只發送文件的某些部分。有關使用urllib部分下載文件的示例,請參見This answer。所以你可以下載一大堆例如1000字節,檢查exif數據是否包含在塊中,如果找不到exif app1頭或exif數據不完整,則下載更多。

+0

非常感謝,但這取決於遠程服務器是否符合範圍標題,這不夠好。我想,需要一些消除x字節或類似字符後捲曲的方法。 – knutole

相關問題