From c8979f40106cc429c8125ce0f520f9470da5404c Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Sun, 3 Apr 2016 17:03:13 +0200 Subject: jpeg-utils: Override artist and owner name Useful to override previous camera owner name stored in EXIF. --- sample/src/setup.xml | 6 ++++++ src/generators.c | 1 + src/items.c | 13 +++++++++++++ src/items.h | 1 + src/jpeg-utils.cpp | 12 ++++++++++++ src/jpeg-utils.h | 1 + src/setup.c | 2 ++ src/setup.h | 1 + 8 files changed, 37 insertions(+) diff --git a/sample/src/setup.xml b/sample/src/setup.xml index a2bb2b2..e421438 100644 --- a/sample/src/setup.xml +++ b/sample/src/setup.xml @@ -72,6 +72,12 @@ This is custom copyright string added to every picture. And the second line. + + + + + John Doe + diff --git a/src/generators.c b/src/generators.c index c1eaf5a..e08f0f5 100644 --- a/src/generators.c +++ b/src/generators.c @@ -297,6 +297,7 @@ metadata_apply_overrides (ExifData *exif_data, g_free (exif_data->override_copyright); exif_data->override_copyright = g_strdup (setup->add_copyright); + exif_data->override_artist_name = get_prop_string (items, item, PROP_METADATA_OVERRIDE_ARTIST_NAME, setup->meta_artist_name); exif_data->timezone_shift = get_prop_int (items, item, PROP_METADATA_TZ_SHIFT, 0); diff --git a/src/items.c b/src/items.c index af36ab9..acd4373 100644 --- a/src/items.c +++ b/src/items.c @@ -187,6 +187,11 @@ parse_album_xml (TGallerySetup *setup, const gchar *filename, TPathInfo *path_in } prop_xml_attr_double (index->properties, PROP_METADATA_OVERRIDE_APERTURE, xml, "/gallery/general/metadata/override", "aperture"); prop_xml_attr_double (index->properties, PROP_METADATA_OVERRIDE_FOCAL_LENGTH, xml, "/gallery/general/metadata/override", "focal_length"); + s = xml_file_get_node_value (xml, "/gallery/general/metadata/artist_name/text()"); + if (s != NULL) { + properties_table_add_string (index->properties, PROP_METADATA_OVERRIDE_ARTIST_NAME, s); + g_free (s); + } /* TODO: add support for lens name */ s = xml_file_get_node_attribute (xml, "/gallery/general/thumbnail", "crop"); @@ -352,6 +357,14 @@ parse_album_xml (TGallerySetup *setup, const gchar *filename, TPathInfo *path_in /* TODO: add support for lens name */ g_free (s); + s = g_strdup_printf ("/gallery/items/*[%d]/metadata/artist_name/text()", i + 1); + s2 = xml_file_get_node_value (xml, s); + if (s2 != NULL) { + properties_table_add_string (item->properties, PROP_METADATA_OVERRIDE_ARTIST_NAME, s2); + g_free (s2); + } + g_free (s); + s = g_strdup_printf ("/gallery/items/*[%d]/thumbnail", i + 1); s2 = xml_file_get_node_attribute (xml, s, "crop"); g_free (s); diff --git a/src/items.h b/src/items.h index b465a46..e62bc02 100644 --- a/src/items.h +++ b/src/items.h @@ -109,6 +109,7 @@ typedef enum { PROP_METADATA_OVERRIDE_DATETIME, PROP_METADATA_OVERRIDE_APERTURE, PROP_METADATA_OVERRIDE_FOCAL_LENGTH, + PROP_METADATA_OVERRIDE_ARTIST_NAME, } PropertyName; /* diff --git a/src/jpeg-utils.cpp b/src/jpeg-utils.cpp index 2d85d3b..ddac2c7 100644 --- a/src/jpeg-utils.cpp +++ b/src/jpeg-utils.cpp @@ -149,6 +149,7 @@ exif_data_free (ExifData *data) if (data) { g_free (data->override_copyright); g_free (data->external_exif_data); + g_free (data->override_artist_name); /* FIXME: free data->priv->image */ g_free (data->priv); g_free (data); @@ -914,6 +915,17 @@ modify_exif (const gchar *filename, ExifData *exif, gboolean strip_thumbnail, gb modified = TRUE; } } + + if (exif->override_artist_name) { + if (! exifData.empty()) { + exifData["Exif.Image.Artist"] = exif->override_artist_name; + if (exifData["Exif.Photo.CameraOwnerName"].count() >= 1) + exifData["Exif.Photo.CameraOwnerName"] = exif->override_artist_name; + if (exifData["Exif.Canon.OwnerName"].count() >= 1) + exifData["Exif.Canon.OwnerName"] = exif->override_artist_name; + modified = TRUE; + } + } } diff --git a/src/jpeg-utils.h b/src/jpeg-utils.h index bddb096..3c56eaf 100644 --- a/src/jpeg-utils.h +++ b/src/jpeg-utils.h @@ -56,6 +56,7 @@ typedef struct { time_t override_datetime; double override_aperture; double override_focal_length; + gchar *override_artist_name; gchar *external_exif_data; TCropStyle thumbnail_crop_style; TCropHint thumbnail_crop_hint; diff --git a/src/setup.c b/src/setup.c index 911a702..37a5382 100644 --- a/src/setup.c +++ b/src/setup.c @@ -113,6 +113,7 @@ parse_setup_xml (const gchar *filename) setup->use_title_as_meta = xml_file_get_node_attribute_boolean_with_default (xml, "/gallery_setup/meta/use_title_as_meta", "value", TRUE); setup->site_title = xml_file_get_node_attribute (xml, "/gallery_setup/meta/site", "title"); setup->add_copyright = xml_file_get_node_value (xml, "/gallery_setup/meta/add_copyright/text()"); + setup->meta_artist_name = xml_file_get_node_value (xml, "/gallery_setup/meta/artist_name/text()"); setup->favicon_file = xml_file_get_node_value (xml, "/gallery_setup/meta/favicon/text()"); setup->favicon_type = xml_file_get_node_attribute (xml, "/gallery_setup/meta/favicon", "type"); @@ -586,6 +587,7 @@ free_setup_data (TGallerySetup *setup) g_free (setup->meta_keywords); g_free (setup->site_title); g_free (setup->add_copyright); + g_free (setup->meta_artist_name); g_free (setup->favicon_file); g_free (setup->favicon_type); g_free (setup->feed_filename); diff --git a/src/setup.h b/src/setup.h index 9459043..bf8f9a7 100644 --- a/src/setup.h +++ b/src/setup.h @@ -67,6 +67,7 @@ typedef struct { gboolean use_title_as_meta; gchar *site_title; gchar *add_copyright; + gchar *meta_artist_name; gchar *favicon_file; gchar *favicon_type; -- cgit v1.2.3