Exiv2 ライブラリを使用していくつかの exif タグを画像に書き込みます。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";
}