@@ -1057,14 +1057,16 @@ int dt_exif_write_blob(uint8_t *blob, uint32_t size, const char *path, const int
1057
1057
Exiv2::ExifData blobExifData;
1058
1058
Exiv2::ExifParser::decode (blobExifData, blob + 6 , size);
1059
1059
Exiv2::ExifData::const_iterator end = blobExifData.end ();
1060
+ Exiv2::ExifData::iterator it;
1060
1061
for (Exiv2::ExifData::const_iterator i = blobExifData.begin (); i != end; ++i)
1061
1062
{
1063
+ // add() does not override! we need to delete existing key first.
1062
1064
Exiv2::ExifKey key (i->key ());
1063
- if (imgExifData.findKey (key) == imgExifData.end ())
1064
- imgExifData.add (Exiv2::ExifKey (i->key ()), &i->value ());
1065
+ if ((it = imgExifData.findKey (key)) != imgExifData.end ()) imgExifData.erase (it);
1066
+
1067
+ imgExifData.add (Exiv2::ExifKey (i->key ()), &i->value ());
1065
1068
}
1066
1069
// Remove thumbnail
1067
- Exiv2::ExifData::iterator it;
1068
1070
if ((it = imgExifData.findKey (Exiv2::ExifKey (" Exif.Thumbnail.Compression" ))) != imgExifData.end ())
1069
1071
imgExifData.erase (it);
1070
1072
if ((it = imgExifData.findKey (Exiv2::ExifKey (" Exif.Thumbnail.XResolution" ))) != imgExifData.end ())
@@ -1114,8 +1116,6 @@ int dt_exif_read_blob(uint8_t *buf, const char *path, const int imgid, const int
1114
1116
assert (image.get () != 0 );
1115
1117
image->readMetadata ();
1116
1118
Exiv2::ExifData &exifData = image->exifData ();
1117
- // needs to be reset, even in dng mode, as the buffers are flipped during raw import
1118
- exifData[" Exif.Image.Orientation" ] = uint16_t (1 );
1119
1119
1120
1120
// get rid of thumbnails
1121
1121
Exiv2::ExifThumb (exifData).erase ();
@@ -1154,6 +1154,8 @@ int dt_exif_read_blob(uint8_t *buf, const char *path, const int imgid, const int
1154
1154
{
1155
1155
/* Delete various MakerNote fields only applicable to the raw file */
1156
1156
1157
+ exifData[" Exif.Image.Orientation" ] = uint16_t (1 );
1158
+
1157
1159
// Canon color space info
1158
1160
if ((pos = exifData.findKey (Exiv2::ExifKey (" Exif.Canon.ColorSpace" ))) != exifData.end ())
1159
1161
exifData.erase (pos);
0 commit comments