2014-01-30 104 views
0

我的照片編輯器搞砸了許多照片的標籤。我將此作爲最後一步,開始熟悉Python並編寫腳本來清理標記。我發現pyexiv2可能會非常方便,我試圖基本遵循教程(http://tilloy.net/dev/pyexiv2/tutorial.html)。將修改後的主題數據寫入XMP文件失敗(使用pyexiv2)

我所試圖做的事:

  • 解析從XMP文件中的原始數據(注:我直接用附屬文件,而不需要編寫元數據導入的照片文件)。
  • 閱讀從Xmp.dc.subject初始標籤(S)(並打印到stdout調試)
  • 更改標記爲新值(和調試打印新值)
  • 寫入新數據返回到XMP文件

事情看起來相當不錯,直到我在編輯器中檢查XMP文件。更改的值只是不顯示。但是,XMP文件會獲得新的時間戳,並且如果我將XMP文件設置爲只讀,則會收到錯誤消息。所以似乎有東西被寫入文件。只是不正​​確的數據。

下面是一個最小的腳本,顯示我的問題:

import pyexiv2 

key= 'Xmp.dc.subject' 
metadata = pyexiv2.ImageMetadata('test.xmp') 
metadata.read() 

print metadata[key] 
metadata[key] = ['NewTag'] 
print metadata[key] 
metadata.write() 

它的輸出是:

<Xmp.dc.subject [bag Text] = ['OldTag']> 
<Xmp.dc.subject [bag Text] = ['NewTag']> 
Script terminated. 

但XMP文件的相關部分仍然是這樣的:

<dc:subject> 
    <rdf:Bag> 
    <rdf:li>OldTag</rdf:li> 
    </rdf:Bag> 
</dc:subject> 

那麼,爲了將更改後的元數據寫入XMP文件,我需要做些什麼?

請注意,我是一個Python初學者(但不是編程),所以這個問題可能是由於我不知道的一些微不足道的事情造成的。我在Debian Linux上運行Python 2.7.6。

回答

0

API文檔約pyexiv2.metadata.ImageMetadata說:

一種用於嵌入在圖像中的所有元數據的容器。

它提供了使用Python類型操縱嵌入圖像文件(如JPEG和TIFF文件)中的EXIF,IPTC和XMP元數據的便捷方法。它還提供對嵌入圖像中的預覽的訪問。

看起來像邊車文件可能不支持寫入。

+0

看來,這個答案是正確的。我檢查了exiv2的文檔(pyexiv2使用了AFAIK),並且寫入XMP文件被列爲「支持」,但是即使直接從命令shell直接使用exiv2,我仍然無法將XMP數據寫入附屬文件。將(同一個xMP)數據寫入JPEG文件可以很好地工作...... –