首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Exiv2 -某些图像标签不能写入,但有些可以写入

Exiv2 -某些图像标签不能写入,但有些可以写入
EN

Stack Overflow用户
提问于 2012-07-27 02:35:37
回答 1查看 983关注 0票数 1

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

但是,有些会抛出错误,有些只是不写,但不会抛出错误。我注意到使用Exif.Image.*的标签不起作用,一些使用Exif.Photo.*的标签起作用,有些不起作用,但找不到模式。

我正在使用JHEAD检查写入文件的内容。

想知道是否有人在过去遇到过这种行为,或者知道发生了什么?谢谢。

代码语言:javascript
复制
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";
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-30 15:40:29

同时使用JPEG和TIFF图像运行此代码,我无法重现所描述的问题;它没有抛出任何异常,并且所有标记都被写入到图像中。

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

如果您可以提供一个复制器-或者除了上面的代码之外的一个目标图像-来触发所描述的行为,请在dev.exiv2.org的Exiv2错误跟踪器中报告这个问题。

安德烈亚斯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11675838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档