2012-07-26 89 views
1

使用Exiv2庫將一些exif標籤寫入圖像我正在運行下面的代碼,類似於Exiv2 site上提供的示例。Exiv2 - 一些圖像標籤沒有寫,但有些是做的

但是,一些拋出錯誤和一些根本不寫但不拋出錯誤。我注意到Exif.Image。*中的標籤不工作,有些與Exif.Photo。*工作,有些則不工作,但無法找到模式。

我正在使用JHEAD檢查寫入文件的內容。

想知道是否有人在過去遇到過這種行爲或知道發生了什麼?謝謝。

Exiv2::ExifData exifData; 

try { 

// these work fine 
exifData["Exif.Photo.FNumber"] = Exiv2::Rational(7, 5); 
exifData["Exif.Photo.ExposureTime"] = Exiv2::Rational(1, 1); 
exifData["Exif.Photo.WhiteBalance"] = uint16_t(1); 
exifData["Exif.Photo.ShutterSpeedValue"] = Exiv2::Rational(1, 1); 
exifData["Exif.Photo.DateTimeOriginal"] = "12:12:12"; 

// throw errors 
exifData["Exif.Photo.ISOSpeed"] = int32_t(2); 

// don't throw error, but don't write to jpg 
exifData["Exif.Photo.GainControl"] = uint16_t(0); 
exifData["Exif.Photo.Saturation"] = uint16_t(100); 
exifData["Exif.Photo.Sharpness"] = uint16_t(2); 

Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open("filepath"); 
assert(image.get() != 0); 

image->setExifData(exifData); 
image->writeMetadata(); 

} 
catch (Exiv2::AnyError& e) { 
cout << "Caught Exiv2 exception '" << e << "'\n"; 
} 

回答

0

運行此代碼同時具有JPEG和TIFF圖像,我無法重現所描述的問題;它不會拋出任何異常,並將所有標籤寫入圖像。

然而,Exiv2默默地不寫某些標籤。如果目標圖像是類似TIFF的圖像,則不會發生JPEG。被忽略的標籤是Exiv2認爲與圖像本身完整性相關的TIFF「圖像標籤」,因爲在類似TIFF的圖像的結構中,圖像標籤和元數據共存。所有這些圖像標籤都來自「圖像」組(Exif.Image。*),一個示例是Exif.Image.ImageWidth。

如果您可以提供除上述代碼之外的再現器或目標圖像,以觸發所描述的行爲,請將其報告爲dev.exiv2.org上的Exiv2錯誤跟蹤器中的問題。

Andreas

+0

感謝您的回覆。我會照辦的。只是爲了檢查,jpg和jpeg與exiv2有所不同嗎? 我用ImageMagick(Magick ++)創建圖像。 – barnabus 2012-07-30 16:34:05

+0

好的 - 我注意到Jhead是罪魁禍首。如果我使用命令行工具__exif__它顯示數據。 – barnabus 2012-07-30 18:54:21

相關問題