Exiv2 - 一些Image标签没有写,但有些标签

时间:2012-07-26 18:35:37

标签: c++ jpeg exif exiv2

使用Exiv2库将一些exif标签写入图像我正在运行以下代码,类似于Exiv2 site上提供的示例。

然而,有些抛出错误,有些根本不写,但没有抛出错误。我注意到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";
}

1 个答案:

答案 0 :(得分:0)

使用JPEG和TIFF图像运行此代码,我无法重现所描述的问题;它不会抛出任何异常,所有标签都会写入图像。

然而,Exiv2默默地不会写某些标签。如果目标图像是类似TIFF的图像,则会发生这种情况,而JPEG不会发生这种情况。被忽略的标签是Exiv2认为与图像本身的完整性相关的TIFF“图像标签”,因为在类似TIFF的图像的结构中,图像标签和元数据共存。所有这些图像标签都来自“Image”组(Exif.Image。*),例如Exif.Image.ImageWidth。

如果您可以提供再现器 - 或上述代码之外的目标图像 - 触发所描述的行为,请在dev.exiv2.org的Exiv2错误跟踪器中报告此问题。

安德烈亚斯