diff options
| -rw-r--r-- | src/jpeg-utils.cpp | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/src/jpeg-utils.cpp b/src/jpeg-utils.cpp index 6af7f1f..ece40e4 100644 --- a/src/jpeg-utils.cpp +++ b/src/jpeg-utils.cpp @@ -580,7 +580,7 @@ shift_exif_time (Exiv2::ExifData& exifData, const char *key, int amount) } static gboolean -shift_iptc_time (Exiv2::IptcData &iptcData, int amount) +shift_iptc_time (Exiv2::IptcData &iptcData, const char *date_key, const char *time_key, int amount) { struct tm tt = {0}; long int orig_time; @@ -589,10 +589,9 @@ shift_iptc_time (Exiv2::IptcData &iptcData, int amount) Exiv2::TimeValue tval; res = FALSE; - if (iptc_has_key (iptcData, "Iptc.Application2.DateCreated") || - iptc_has_key (iptcData, "Iptc.Application2.TimeCreated")) { - orig_time = (iptc_has_key (iptcData, "Iptc.Application2.DateCreated") ? iptcData["Iptc.Application2.DateCreated"].toLong() : 0) + - (iptc_has_key (iptcData, "Iptc.Application2.TimeCreated") ? iptcData["Iptc.Application2.TimeCreated"].toLong() : 0); + if (iptc_has_key (iptcData, date_key) || iptc_has_key (iptcData, time_key)) { + orig_time = (iptc_has_key (iptcData, date_key) ? iptcData[date_key].toLong() : 0) + + (iptc_has_key (iptcData, time_key) ? iptcData[time_key].toLong() : 0); if (orig_time > 0) { orig_time += amount * 60; localtime_r (&orig_time, &tt); @@ -602,8 +601,8 @@ shift_iptc_time (Exiv2::IptcData &iptcData, int amount) dval = Exiv2::DateValue(tt.tm_year + 1900, tt.tm_mon + 1, tt.tm_mday); tval = Exiv2::TimeValue(tt.tm_hour, tt.tm_min, tt.tm_sec, 0, 0); - iptcData["Iptc.Application2.DateCreated"].setValue(&dval); - iptcData["Iptc.Application2.TimeCreated"].setValue(&tval); + iptcData[date_key].setValue(&dval); + iptcData[time_key].setValue(&tval); res = TRUE; } } @@ -633,19 +632,25 @@ fake_exif_time (Exiv2::ExifData &exifData, const char *key, time_t datetime) return res; } -static void -fake_iptc_time (Exiv2::IptcData &iptcData, time_t datetime) +static gboolean +fake_iptc_time (Exiv2::IptcData &iptcData, const char *date_key, const char *time_key, time_t datetime) { struct tm tt = {0}; Exiv2::DateValue dval; Exiv2::TimeValue tval; - localtime_r (&datetime, &tt); + if (iptc_has_key (iptcData, date_key) || iptc_has_key (iptcData, time_key)) { + localtime_r (&datetime, &tt); + + dval = Exiv2::DateValue(tt.tm_year + 1900, tt.tm_mon + 1, tt.tm_mday); + tval = Exiv2::TimeValue(tt.tm_hour, tt.tm_min, tt.tm_sec, 0, 0); + iptcData[date_key].setValue(&dval); + iptcData[time_key].setValue(&tval); + + return TRUE; + } - dval = Exiv2::DateValue(tt.tm_year + 1900, tt.tm_mon + 1, tt.tm_mday); - tval = Exiv2::TimeValue(tt.tm_hour, tt.tm_min, tt.tm_sec, 0, 0); - iptcData["Iptc.Application2.DateCreated"].setValue(&dval); - iptcData["Iptc.Application2.TimeCreated"].setValue(&tval); + return FALSE; } /* @@ -704,7 +709,8 @@ modify_exif (const gchar *filename, ExifData *exif, gboolean strip_thumbnail, gb modified = TRUE; } if (! iptcData.empty()) { - res = shift_iptc_time (iptcData, exif->timezone_shift); + res = shift_iptc_time (iptcData, "Iptc.Application2.DateCreated", "Iptc.Application2.TimeCreated", exif->timezone_shift); + res = shift_iptc_time (iptcData, "Iptc.Application2.DigitizationDate", "Iptc.Application2.DigitizationTime", exif->timezone_shift) || res; if (res) modified = TRUE; } @@ -719,8 +725,10 @@ modify_exif (const gchar *filename, ExifData *exif, gboolean strip_thumbnail, gb modified = TRUE; } if (! iptcData.empty()) { - fake_iptc_time (iptcData, exif->fake_datetime); - modified = TRUE; + res = fake_iptc_time (iptcData, "Iptc.Application2.DateCreated", "Iptc.Application2.TimeCreated", exif->fake_datetime); + res = fake_iptc_time (iptcData, "Iptc.Application2.DigitizationDate", "Iptc.Application2.DigitizationTime", exif->fake_datetime) || res; + if (res) + modified = TRUE; } } } |
