[gimp] libgimp: add gimp_image_metadata_load_thumbnail()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] libgimp: add gimp_image_metadata_load_thumbnail()
- Date: Tue, 29 Oct 2013 23:05:47 +0000 (UTC)
commit 1522c506a24507c9b9e1f3951386e05e01d9a585
Author: Michael Natterer <mitch gimp org>
Date: Wed Oct 30 00:04:36 2013 +0100
libgimp: add gimp_image_metadata_load_thumbnail()
which loads an image file's Exif thumbnail into a correctly rotated
gimp image.
libgimp/gimpmetadata.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++
libgimp/gimpmetadata.h | 6 +++++
libgimp/gimpui.def | 1 +
3 files changed, 65 insertions(+), 0 deletions(-)
---
diff --git a/libgimp/gimpmetadata.c b/libgimp/gimpmetadata.c
index 3413693..2142acc 100644
--- a/libgimp/gimpmetadata.c
+++ b/libgimp/gimpmetadata.c
@@ -493,6 +493,64 @@ gimp_image_metadata_save_finish (gint32 image_ID,
return success;
}
+gint32
+gimp_image_metadata_load_thumbnail (GFile *file,
+ GError **error)
+{
+ GimpMetadata *metadata;
+ GInputStream *input_stream;
+ GdkPixbuf *pixbuf;
+ guint8 *thumbnail_buffer;
+ gint thumbnail_size;
+ gint32 image_ID = -1;
+
+ g_return_val_if_fail (G_IS_FILE (file), -1);
+ g_return_val_if_fail (error == NULL || *error == NULL, -1);
+
+ metadata = gimp_metadata_load_from_file (file, error);
+ if (! metadata)
+ return -1;
+
+ if (! gexiv2_metadata_get_exif_thumbnail (metadata,
+ &thumbnail_buffer,
+ &thumbnail_size))
+ {
+ g_object_unref (metadata);
+ return -1;
+ }
+
+ input_stream = g_memory_input_stream_new_from_data (thumbnail_buffer,
+ thumbnail_size,
+ (GDestroyNotify) g_free);
+ pixbuf = gdk_pixbuf_new_from_stream (input_stream, NULL, error);
+ g_object_unref (input_stream);
+
+ if (pixbuf)
+ {
+ gint32 layer_ID;
+
+ image_ID = gimp_image_new (gdk_pixbuf_get_width (pixbuf),
+ gdk_pixbuf_get_height (pixbuf),
+ GIMP_RGB);
+ gimp_image_undo_disable (image_ID);
+
+ layer_ID = gimp_layer_new_from_pixbuf (image_ID, _("Background"),
+ pixbuf,
+ 100.0, GIMP_NORMAL_MODE,
+ 0.0, 0.0);
+ g_object_unref (pixbuf);
+
+ gimp_image_insert_layer (image_ID, layer_ID, -1, 0);
+
+ gimp_image_metadata_rotate (image_ID,
+ gexiv2_metadata_get_orientation (metadata));
+ }
+
+ g_object_unref (metadata);
+
+ return image_ID;
+}
+
/* private functions */
diff --git a/libgimp/gimpmetadata.h b/libgimp/gimpmetadata.h
index 2c3d51a..e30ed23 100644
--- a/libgimp/gimpmetadata.h
+++ b/libgimp/gimpmetadata.h
@@ -49,6 +49,12 @@ gboolean gimp_image_metadata_save_finish (gint32 image_ID
GFile *file,
GError **error);
+
+/* this is experimental API, so be finished for 2.10 */
+
+gint32 gimp_image_metadata_load_thumbnail (GFile *file,
+ GError **error);
+
G_END_DECLS
#endif /* ___LIBGIMP_GIMP_METADATA_H__ */
diff --git a/libgimp/gimpui.def b/libgimp/gimpui.def
index 4fe8fe1..79d6660 100644
--- a/libgimp/gimpui.def
+++ b/libgimp/gimpui.def
@@ -40,6 +40,7 @@ EXPORTS
gimp_image_menu_new
gimp_image_metadata_load_finish
gimp_image_metadata_load_prepare
+ gimp_image_metadata_load_thumbnail
gimp_image_metadata_save_finish
gimp_image_metadata_save_prepare
gimp_layer_combo_box_get_type
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]