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