使用 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";
}
最佳答案
同时使用 JPEG 和 TIFF 图像运行此代码,我无法重现所描述的问题;它不会抛出任何异常,所有标签都将写入图像。
然而,Exiv2 确实不会默默地写入某些标签。如果目标图像是类似 TIFF 的图像,就会发生这种情况,而 JPEG 则不会发生这种情况。被忽略的标签是 Exiv2 认为与图像本身的完整性相关的 TIFF“图像标签”,因为在类似 TIFF 的图像结构中,图像标签和元数据共存。所有这些图像标签都来自“图像”组 (Exif.Image.*),例如 Exif.Image.ImageWidth。
如果您可以提供除上述代码之外的复制器或目标图像来触发所描述的行为,请在 dev.exiv2.org 的 Exiv2 bugtracker 中将此作为问题报告。
安德烈亚斯
关于c++ - Exiv2 - 一些图像标签不写,但有些写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11675838/