Bug 142564

Summary: digiKam-signature in iptc and exif tags
Product: [Applications] digikam Reporter: Caspar Maessen <cmaessen>
Component: Metadata-ExifAssignee: Digikam Developers <digikam-bugs-null>
Status: RESOLVED FIXED    
Severity: wishlist CC: caulier.gilles
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: unspecified   
OS: Linux   
Latest Commit: Version Fixed In: 7.5.0

Description Caspar Maessen 2007-03-05 20:39:57 UTC
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.
Comment 1 Mikolaj Machowski 2007-03-06 22:27:35 UTC
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.
Comment 2 caulier.gilles 2007-03-11 11:29:55 UTC
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();