diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/generators.c | 12 | ||||
| -rw-r--r-- | src/jpeg-utils.cpp | 13 | ||||
| -rw-r--r-- | src/jpeg-utils.h | 1 | ||||
| -rw-r--r-- | src/setup.c | 1 | ||||
| -rw-r--r-- | src/setup.h | 1 |
5 files changed, 26 insertions, 2 deletions
diff --git a/src/generators.c b/src/generators.c index 133c4c1..0e1985a 100644 --- a/src/generators.c +++ b/src/generators.c @@ -149,6 +149,7 @@ get_image_paths (TGallerySetup *setup, static void metadata_apply_overrides (ExifData *exif_data, TGallerySetup *setup, + TPathInfo *path_info, TAlbum *items, TIndexItem *item) { @@ -156,12 +157,19 @@ metadata_apply_overrides (ExifData *exif_data, g_free (exif_data->override_copyright); exif_data->override_copyright = g_strdup (setup->add_copyright); + exif_data->timezone_shift = item->metadata_tz_shift; if (exif_data->timezone_shift == 0) exif_data->timezone_shift = items->metadata_tz_shift; + exif_data->fake_datetime = item->metadata_fake_datetime; if (exif_data->fake_datetime == (time_t) -1) exif_data->fake_datetime = items->metadata_fake_datetime; + + g_free (exif_data->external_exif_data); + exif_data->external_exif_data = NULL; + if (setup->write_supplied_exif && item->metadata_external_exif) + exif_data->external_exif_data = g_build_filename (path_info->src_dir, item->metadata_external_exif, NULL); } @@ -252,7 +260,7 @@ generate_image (TGallerySetup *setup, } if (! is_thumbnail) { exif_data = exif_data_new_empty (); - metadata_apply_overrides (exif_data, setup, items, item); + metadata_apply_overrides (exif_data, setup, path_info, items, item); modify_exif (img_dst, exif_data, setup->erase_exif_thumbnail); exif_data_free (exif_data); } @@ -778,7 +786,7 @@ write_html_image (TGallerySetup *setup, if (exif == NULL) log_error ("write_html_image: error getting exif data from file \"%s\"\n", img_dst); } - metadata_apply_overrides (exif, setup, parent_items, item); + metadata_apply_overrides (exif, setup, path_info, parent_items, item); /* Test for basic EXIF keys presence */ if (exif != NULL && exif_has_key (exif, EXIF_APERTURE) && exif_has_key (exif, EXIF_FOCAL_LENGTH) && diff --git a/src/jpeg-utils.cpp b/src/jpeg-utils.cpp index 6483563..321a9b6 100644 --- a/src/jpeg-utils.cpp +++ b/src/jpeg-utils.cpp @@ -129,6 +129,7 @@ exif_data_free (ExifData *data) { if (data) { g_free (data->override_copyright); + g_free (data->external_exif_data); /* FIXME: free data->priv->image */ g_free (data->priv); g_free (data); @@ -663,6 +664,18 @@ modify_exif (const gchar *filename, ExifData *exif, gboolean strip_thumbnail) g_assert (image.get() != 0); image->readMetadata(); + + /* Write down metadata from external file if supplied */ + if (exif && exif->external_exif_data) { + Exiv2::Image::AutoPtr ext_image = Exiv2::ImageFactory::open (exif->external_exif_data); + if (ext_image.get() != 0) { + ext_image->clearMetadata(); + ext_image->readMetadata(); + image->setMetadata (*ext_image); + modified = TRUE; + } + } + Exiv2::ExifData &exifData = image->exifData(); Exiv2::IptcData &iptcData = image->iptcData(); diff --git a/src/jpeg-utils.h b/src/jpeg-utils.h index cc6c5c7..d393fbe 100644 --- a/src/jpeg-utils.h +++ b/src/jpeg-utils.h @@ -53,6 +53,7 @@ typedef struct { gchar *override_copyright; int timezone_shift; time_t fake_datetime; + gchar *external_exif_data; } ExifData; diff --git a/src/setup.c b/src/setup.c index e4df0dd..7dde0c8 100644 --- a/src/setup.c +++ b/src/setup.c @@ -94,6 +94,7 @@ parse_setup_xml (const gchar *filename) setup->preload = xml_file_get_node_attribute_boolean (xml, "/gallery_setup/images/preload", "value", TRUE); setup->use_iptc_exif = xml_file_get_node_attribute_boolean (xml, "/gallery_setup/images/use_iptc_exif", "value", FALSE); setup->erase_exif_thumbnail = xml_file_get_node_attribute_boolean (xml, "/gallery_setup/images/erase_embed_thumbnail", "value", FALSE); + setup->write_supplied_exif = xml_file_get_node_attribute_boolean (xml, "/gallery_setup/images/write_supplied_exif", "value", FALSE); setup->nofullsize = xml_file_get_node_present (xml, "/gallery_setup/images/nofullsize"); setup->autorotate = xml_file_get_node_attribute_boolean (xml, "/gallery_setup/images/autorotate", "value", TRUE); diff --git a/src/setup.h b/src/setup.h index daf8453..10e9d7b 100644 --- a/src/setup.h +++ b/src/setup.h @@ -56,6 +56,7 @@ typedef struct { gboolean preload; gboolean use_iptc_exif; gboolean erase_exif_thumbnail; + gboolean write_supplied_exif; gboolean nofullsize; ThumbnailSquareType squared_thumbnail_type; gboolean autorotate; |
