[gimp/gimp-2-10] libgimp: fix issue #6050 Phantom comments on pictures.
- From: Jacob Boerema <jboerema src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-2-10] libgimp: fix issue #6050 Phantom comments on pictures.
- Date: Mon, 22 Mar 2021 20:30:45 +0000 (UTC)
commit e10517dcccedd3534cd50c6dd8e69448b69c81d5
Author: Jacob Boerema <jgboerema gmail com>
Date: Mon Mar 22 16:06:54 2021 -0400
libgimp: fix issue #6050 Phantom comments on pictures.
Since version 0.27.3 exiv2 has changed how it returns
comments for Exif.Photo.UserComment. We now get
the comment including the charset=Ascii value.
Let's remove anything that's not part of the actual
comment. To not complicate things we will only
handle charset=Ascii for now since I've never seen
any other charset used.
(cherry picked from commit 352b5885b19a65322013407ca2670a6af25da7bb)
# Conflicts:
# libgimp/gimpimagemetadata.c
libgimp/gimpimagemetadata.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
---
diff --git a/libgimp/gimpimagemetadata.c b/libgimp/gimpimagemetadata.c
index 1697010015..52fad728c0 100644
--- a/libgimp/gimpimagemetadata.c
+++ b/libgimp/gimpimagemetadata.c
@@ -39,6 +39,7 @@ typedef struct
gint type;
} XmpStructs;
+static gchar * gimp_image_metadata_interpret_comment (gchar *comment);
static void gimp_image_metadata_rotate (gint32 image_ID,
GExiv2Orientation orientation);
@@ -92,6 +93,37 @@ gimp_image_metadata_load_prepare (gint32 image_ID,
return metadata;
}
+static gchar *
+gimp_image_metadata_interpret_comment (gchar *comment)
+{
+ /* Exiv2 can return unwanted text at the start of a comment
+ * taken from Exif.Photo.UserComment since 0.27.3.
+ * Let's remove that part and return NULL if there
+ * is nothing else left as comment. */
+
+ if (comment && g_str_has_prefix (comment, "charset=Ascii "))
+ {
+ gchar *real_comment;
+
+ /* Skip "charset=Ascii " (length 14) to find the real comment */
+ real_comment = comment + 14;
+ if (real_comment[0] == '\0' ||
+ ! g_strcmp0 (real_comment, "binary comment"))
+ {
+ g_free (comment);
+ return NULL;
+ }
+ else
+ {
+ real_comment = g_strdup (real_comment);
+ g_free (comment);
+ return real_comment;
+ }
+ }
+
+ return comment;
+}
+
/**
* gimp_image_metadata_load_finish:
* @image_ID: The image
@@ -123,6 +155,8 @@ gimp_image_metadata_load_finish (gint32 image_ID,
comment = gexiv2_metadata_get_tag_interpreted_string (GEXIV2_METADATA (metadata),
"Exif.Photo.UserComment");
+ comment = gimp_image_metadata_interpret_comment (comment);
+
if (! comment)
comment = gexiv2_metadata_get_tag_interpreted_string (GEXIV2_METADATA (metadata),
"Exif.Image.ImageDescription");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]