Version: 0.9.1 (using KDE 3.5.6 "release 31.2" , openSUSE ) Compiler: Target: i586-suse-linux OS: Linux (i686) release 2.6.18.2-34-default I recently noticed that digiKam edits the tags Exif.Image.Software, Iptc.Application2.Program and Iptc.Application2.ProgramVersion by placing its signature in it. In doing so it is replacing information that was originally put there by the camera or by myself. I think this is not the correct way to go. Especially in the case of the exif-tag where the camera's firmware version is overwritten. As the standard states for the exif-tag; "This tag records the name and version of the software or firmware of the camera or image input device used to generate the image." In the case of the IPTC-tags, which are meant to "identify the program and programversion used to originate the object data", my personal information is overwritten. I would appreciate if this behavior is corrected, or made optional by implementing a configuration-setting. Caspar.
Agree - Digikam shouldn't overwrite device tag but IMO it is acceptable to enter info about D. when tags where empty. Even if it doesn't follow to the letter specification - D. isn't "camera or image input device". For exif tag it could even not be configurable. IMO for IPTC tags it should be configurable.
SVN commit 641435 by cgilles: libkexiv2 from trunk : set the Exif.Image.Software tag only if it doesn't exist. BUG: 142564 M +16 -4 kexiv2.cpp --- trunk/extragear/libs/libkexiv2/kexiv2.cpp #641434:641435 @@ -450,10 +450,22 @@ { try { - QString software(program); - software.append("-"); - software.append(version); - d->exifMetadata["Exif.Image.Software"] = software.ascii(); + // Check if Exif.Image.Software already exist. If yes, do not touch this tag. + + if (!d->exifMetadata.empty()) + { + Exiv2::ExifData exifData(d->exifMetadata); + Exiv2::ExifKey key("Exif.Image.Software"); + Exiv2::ExifData::iterator it = exifData.findKey(key); + + if (it == exifData.end()) + { + QString software(program); + software.append("-"); + software.append(version); + d->exifMetadata["Exif.Image.Software"] = software.ascii(); + } + } d->iptcMetadata["Iptc.Application2.Program"] = program.ascii(); d->iptcMetadata["Iptc.Application2.ProgramVersion"] = version.ascii();