[gimp] Issue #5274 - Exporting as TIFF fails for layers with a negative offset
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Issue #5274 - Exporting as TIFF fails for layers with a negative offset
- Date: Thu, 25 Jun 2020 15:35:57 +0000 (UTC)
commit 536bf771b7c1966227d40957ce4053489930ded0
Author: Ell <ell_se yahoo com>
Date: Thu Jun 25 17:05:59 2020 +0300
Issue #5274 - Exporting as TIFF fails for layers with a negative offset
When exporting a TIFF file without merging the image, make sure non
of the exported layers has a negative offset, by offsetting all the
layers as necessary. TIFF doesn't support negative page offsets,
giving an error in libtiff.
plug-ins/file-tiff/file-tiff-save.c | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
---
diff --git a/plug-ins/file-tiff/file-tiff-save.c b/plug-ins/file-tiff/file-tiff-save.c
index 013143a179..fca3f8847e 100644
--- a/plug-ins/file-tiff/file-tiff-save.c
+++ b/plug-ins/file-tiff/file-tiff-save.c
@@ -275,6 +275,8 @@ save_layer (TIFF *tif,
gint32 num_pages,
GimpImage *orig_image, /* the export function might
* have created a duplicate */
+ gint origin_x,
+ gint origin_y,
gint *saved_bpp,
gboolean out_linear,
GError **error)
@@ -693,6 +695,9 @@ save_layer (TIFF *tif,
gimp_drawable_offsets (GIMP_DRAWABLE (layer), &offset_x, &offset_y);
+ offset_x -= origin_x;
+ offset_y -= origin_y;
+
if (offset_x || offset_y)
{
TIFFSetField (tif, TIFFTAG_XPOSITION, offset_x / xresolution);
@@ -951,6 +956,9 @@ save_image (GFile *file,
gint32 num_layers;
gint32 current_layer = 0;
GList *layers;
+ GList *iter;
+ gint origin_x = 0;
+ gint origin_y = 0;
gint saved_bpp;
gchar *config_comment;
gboolean config_save_profile;
@@ -1046,11 +1054,25 @@ save_image (GFile *file,
if (config_save_thumbnail)
TIFFSetField (tif, TIFFTAG_SUBIFD, number_of_sub_IFDs, sub_IFDs_offsets);
+ /* calculate the top-left coordinates */
+ for (iter = layers; iter; iter = g_list_next (iter))
+ {
+ GimpDrawable *drawable = iter->data;
+ gint offset_x, offset_y;
+
+ gimp_drawable_offsets (drawable, &offset_x, &offset_y);
+
+ origin_x = MIN (origin_x, offset_x);
+ origin_y = MIN (origin_y, offset_y);
+ }
+
/* write last layer as first page. */
if (! save_layer (tif, config, space, image,
g_list_nth_data (layers, current_layer),
current_layer, num_layers,
- orig_image, &saved_bpp, out_linear, error))
+ orig_image,
+ origin_x, origin_y,
+ &saved_bpp, out_linear, error))
{
goto out;
}
@@ -1092,6 +1114,7 @@ save_image (GFile *file,
if (! save_layer (tif, config, space, image,
g_list_nth_data (layers, current_layer),
current_layer, num_layers, orig_image,
+ origin_x, origin_y,
&tmp_saved_bpp, out_linear, error))
{
goto out;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]