2012-07-26 91 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

相关问题