From 50f5ef3cedbeaa251a1e838bf5045a9dc7dda1ee Mon Sep 17 00:00:00 2001 From: Alexander Antimonov <> Date: Mon, 29 May 2017 12:06:13 +0100 Subject: [PATCH] Fix #381: Feature-Request: Make JPEG comment available for overlays https://github.com/BestImageViewer/geeqie/issues/381 Additional tag "imagecomment" for JPEG comments --- doc/docbook/GuideOptionsWindow.xml | 6 ++++- src/exif.c | 12 +++++++++ src/exif.h | 4 +++ src/exiv2.cc | 42 ++++++++++++++++++++++++++++++ src/image-overlay.c | 4 +++ 5 files changed, 67 insertions(+), 1 deletion(-) diff --git a/doc/docbook/GuideOptionsWindow.xml b/doc/docbook/GuideOptionsWindow.xml index 2cee13d6..cfcf70f4 100644 --- a/doc/docbook/GuideOptionsWindow.xml +++ b/doc/docbook/GuideOptionsWindow.xml @@ -180,7 +180,11 @@ comment - Image comment from metadata + Image comment from XMP metadata + + + imagecomment + JPEG image comment <meta_tag> diff --git a/src/exif.c b/src/exif.c index 04784661..872b9ccd 100644 --- a/src/exif.c +++ b/src/exif.c @@ -1105,6 +1105,18 @@ guchar *exif_get_color_profile(ExifData *exif, guint *data_len) } +gchar* exif_get_image_comment(FileData* fd) +{ + log_printf("%s", _("Can't get image comment: not compiled with Exiv2.\n")); + return g_strdup(""); +} + +void exif_set_image_comment(FileData* fd, const gchar* comment) +{ + log_printf("%s", _("Can't set image comment: not compiled with Exiv2.\n")); +} + + /* *------------------------------------------------------------------- * misc diff --git a/src/exif.h b/src/exif.h index 804b8057..06dec25a 100644 --- a/src/exif.h +++ b/src/exif.h @@ -158,6 +158,10 @@ void exif_add_jpeg_color_profile(ExifData *exif, guchar *cp_data, guint cp_lengt gboolean exif_jpeg_parse_color(ExifData *exif, guchar *data, guint size); +/* support for so called "jpeg comment" */ +gchar* exif_get_image_comment(FileData* fd); +void exif_set_image_comment(FileData* fd, const gchar* comment); + /*raw support */ guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width, gint requested_height); void exif_free_preview(guchar *buf); diff --git a/src/exiv2.cc b/src/exiv2.cc index 49b8e07c..0ad5c615 100644 --- a/src/exiv2.cc +++ b/src/exiv2.cc @@ -158,6 +158,10 @@ struct _ExifData virtual void add_jpeg_color_profile(unsigned char *cp_data, guint cp_length) = 0; virtual guchar *get_jpeg_color_profile(guint *data_len) = 0; + + virtual std::string image_comment() const = 0; + + virtual void set_image_comment(const std::string& comment) = 0; }; // This allows read-only access to the original metadata @@ -280,6 +284,17 @@ public: } return NULL; } + + virtual std::string image_comment() const + { + return image_.get() ? image_->comment() : ""; + } + + virtual void set_image_comment(const std::string& comment) + { + if (image_.get()) + image_->setComment(comment); + } }; extern "C" { @@ -415,6 +430,16 @@ public: { return imageData_->get_jpeg_color_profile(data_len); } + + virtual std::string image_comment() const + { + return imageData_->image_comment(); + } + + virtual void set_image_comment(const std::string& comment) + { + imageData_->set_image_comment(comment); + } }; @@ -1133,6 +1158,23 @@ guchar *exif_get_color_profile(ExifData *exif, guint *data_len) return ret; } +gchar* exif_get_image_comment(FileData* fd) +{ + if (!fd || !fd->exif) + return g_strdup(""); + + return g_strdup(fd->exif->image_comment().c_str()); +} + +void exif_set_image_comment(FileData* fd, const gchar* comment) +{ + if (!fd || !fd->exif) + return; + + fd->exif->set_image_comment(comment ? comment : ""); +} + + #if EXIV2_TEST_VERSION(0,17,90) guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width, gint requested_height) diff --git a/src/image-overlay.c b/src/image-overlay.c index bcc56669..7afe1a41 100644 --- a/src/image-overlay.c +++ b/src/image-overlay.c @@ -336,6 +336,10 @@ static gchar *image_osd_mkinfo(const gchar *str, ImageWindow *imd, GHashTable *v { data = metadata_read_string(imd->image_fd, COMMENT_KEY, METADATA_PLAIN); } + else if (strcmp(name, "imagecomment") == 0) + { + data = exif_get_image_comment(imd->image_fd); + } #ifdef HAVE_LUA else if (strncmp(name, "lua/", 4) == 0) { -- 2.20.1