2012-07-03 91 views
3

我有許多TIFF文件,其中包含說明和「關鍵字」(如OS X在文件檢查器中所稱的那樣)。但是,我很難從圖像中收集這些元數據。從Tiff圖片獲取描述/關鍵字?

我使用tifffile.pyPIL的EXIF命令和IPTCInfo審判,而tifffile.py 得到說明我似乎仍不能使用任何一個庫,從文件解析‘關鍵詞’ 。

是否使用不同的「規格」來存儲TIFF的關鍵字而不是JPEG?什麼是解析這些關鍵字的最佳方法?

編輯

而且從abarnert的評論,我打開一個文本編輯器的TIFF文件中的一個,發現有是包含「關鍵字」 XML數據。下面的代碼片段:

... 
<rdf:Description rdf:about="" 
xmlns:dc="http://purl.org/dc/elements/1.1/"> 
<dc:description> 
<rdf:Alt> 
<rdf:li xml:lang="x-default">OLYMPUS DIGITAL CAMERA</rdf:li> 
</rdf:Alt> 
</dc:description> 
<dc:format>image/tiff</dc:format> 
<dc:subject> 
<rdf:Bag> 
<rdf:li>Foo</rdf:li> 
<rdf:li>Bar</rdf:li> 
<rdf:li>A long keyword</rdf:li> 
</rdf:Bag> 
</dc:subject> 
</rdf:Description> 
... 

看起來好像這可以被存儲爲二進制表示; tifffile.py列出了許多基本上是整數元組的標籤。不過,我不確定如何轉換。建議?

+0

@cgohlke不知道這是可能的OS X上; PyPI中沒有包,並且構建過程看起來好像不允許它被沙箱化(這是我的要求)。 –

回答

0

感謝abarnert的幫助我找到了解決方案here。雖然它感覺有點可笑,它的工作,所以我不能抱怨!

2

是否使用TIFF的不同「規格」而不是JPEG存儲關鍵字?

那麼,這取決於。

TIFF容器只有非常有限的一組元數據標籤,並且沒有任何指定任意關鍵字的方法。

JPEG根本不是容器類型;它是一種圖像壓縮編解碼器,可用於各種不同的容器,包括TIFF。但通常當你說「JPEG文件」時,你的意思是JFIF,它是由JPEG組指定的一種容器格式,並且與TIFF一樣,JFIF具有非常有限的一組元數據標籤。

Exif是另一種容器格式,與TIFF相同的結構一樣,但它定義了新的標籤,明確表示爲元數據,這意味着您可以簡單地將TIFF作爲Exif包裝並且仍然是合法的TIFF,並且有點偷偷摸摸的情況下,你也可以將JFIF作爲一個Exif包裝起來,這種方式並不是合法的JFIF,但幾乎所有的軟件都會接受它。

Exif是向JFIF添加元數據(不包括與Exif基本相同的DCF)的唯一常用方式,但它是將元數據添加到TIFF的多種不同方式之一。 IPTC是另一個,XMP,OME以及其他很多其他的也是如此。

因此,一些TIFF文件使用與JFIF-wrapped-in-Exif相同的規範存儲「關鍵字」,但其他文件卻沒有。

什麼是解析這些關鍵字的最佳方法?

那麼,你需要知道它們存儲在什麼格式。

不用說,PIL的Exif命令只支持Exif,IPTCInfo只支持IPTC,並tifffile大多支持......嗯,各種不同的東西。

我相信tifffile.py可以存儲未知的標籤類型是原始的二進制數據,您可以遍歷並查看缺少的內容。這將至少覆蓋所有使用TIFF容器結構的擴展。如果你沒有找到關鍵字,那麼......至少可以排除很多常見的格式。

無論如何,一旦你知道你正在尋找哪種格式,你可以尋找一個可以處理它的庫。 (或者,如果它是基於XML的標記之一,只需將該標記作爲帶有tifffile的二進制數據讀取,然後將其解析爲UTF-8 XML,這可能比找到不同的庫更容易。)

+0

我可以看到在由tifffile(包含整數的長元組)解析的一些標記中可能有二進制數據 - 將這個解析成我可以傳遞給'lxml'的方法是什麼? –

+1

當然,它必須是我沒有提到的格式之一,DCMI ...或者它是DCMI + OMF嗎?無論哪種方式,這都與XMP不同 - 但與XMP一樣,它是一種XML文檔類型,通常只需將UTF-8字符串作爲標記值存儲,即可將其作爲單個標記嵌入到TIFF中。它看起來像tifffile不知道如何處理這個,所以你必須擴展它。您可以將其視爲二進制數據,然後在解碼XML之前解碼UTF-8,或者(更好地)添加read_utf8函數並在CUSTOM_TAGS中引用它。在這一點上,你最好與作者交談? – abarnert

+1

PS,您可能想要查看http://dublincore.org/和http://en.wikipedia.org/wiki/Dublin_Core以獲取有關DCMI數據可以表示的不同方式的更多信息,儘管我不知道在哪裏可以找到關於DCMI-RDF或DCMI-OMF或任何你已經嵌入到TIFF中的文檔。 – abarnert