【问题标题】:Exiv2 - some Image tags not writing, but some doExiv2 - 一些图像标签不写,但有些写
【发布时间】:2012-07-25 10:13:02
【问题描述】:

使用 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";
}

【问题讨论】:

    标签: c++ jpeg exif exiv2


    【解决方案1】:

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

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

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

    安德烈亚斯

    【讨论】:

    • 感谢您的回复。我会照办的。只是检查一下,jpg和jpeg与exiv2有什么不同吗?我正在使用 ImageMagick (Magick++) 创建图像。
    • 好的 - 我注意到 Jhead 是罪魁祸首。如果我使用命令行工具 exif 它会显示数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多