]> granicus.if.org Git - imagemagick/commitdiff
Fixed writing multiple layers from the tiff writer.
authorDirk Lemstra <dirk@git.imagemagick.org>
Sat, 23 Sep 2017 09:45:42 +0000 (11:45 +0200)
committerDirk Lemstra <dirk@git.imagemagick.org>
Sat, 23 Sep 2017 09:45:52 +0000 (11:45 +0200)
coders/psd.c

index a7f09b23b08bf470b0c2b94efbbf8cf850a8ae86..12924ec2274b711268b2877c8bf98f25511e4ff3 100644 (file)
@@ -3116,7 +3116,6 @@ static MagickBooleanType WritePSDLayersInternal(Image *image,
     *info;
 
   Image
-    *base_image,
     *next_image;
 
   MagickBooleanType
@@ -3138,14 +3137,11 @@ static MagickBooleanType WritePSDLayersInternal(Image *image,
     size;
 
   status=MagickTrue;
-  base_image=GetNextImageInList(image);
-  if (base_image == (Image *) NULL)
-    base_image=image;
   size=0;
   size_offset=TellBlob(image);
   SetPSDSize(psd_info,image,0);
   layer_count=0;
-  for (next_image=base_image; next_image != NULL; )
+  for (next_image=image; next_image != NULL; )
   {
     layer_count++;
     next_image=GetNextImageInList(next_image);
@@ -3159,7 +3155,7 @@ static MagickBooleanType WritePSDLayersInternal(Image *image,
   if (layer_size_offsets == (MagickOffsetType *) NULL)
     ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed");
   layer_index=0;
-  for (next_image=base_image; next_image != NULL; )
+  for (next_image=image; next_image != NULL; )
   {
     Image
       *mask;
@@ -3267,7 +3263,7 @@ static MagickBooleanType WritePSDLayersInternal(Image *image,
   /*
     Now the image data!
   */
-  next_image=base_image;
+  next_image=image;
   layer_index=0;
   while (next_image != NULL)
   {
@@ -3296,7 +3292,7 @@ static MagickBooleanType WritePSDLayersInternal(Image *image,
   /*
     Remove the opacity mask from the registry
   */
-  next_image=base_image;
+  next_image=image;
   while (next_image != (Image *) NULL)
   {
     property=GetImageArtifact(next_image,"psd:opacity-mask");
@@ -3490,6 +3486,9 @@ static MagickBooleanType WritePSDImage(const ImageInfo *image_info,
     }
   if (status != MagickFalse)
     {
+      Image
+        *base_image;
+
       MagickOffsetType
         size_offset;
 
@@ -3498,7 +3497,10 @@ static MagickBooleanType WritePSDImage(const ImageInfo *image_info,
 
       size_offset=TellBlob(image);
       SetPSDSize(&psd_info,image,0);
-      status=WritePSDLayersInternal(image,image_info,&psd_info,&size,
+      base_image=GetNextImageInList(image);
+      if (base_image == (Image *) NULL)
+        base_image=image;
+      status=WritePSDLayersInternal(base_image,image_info,&psd_info,&size,
         exception);
       size_offset+=WritePSDSize(&psd_info,image,size+
         (psd_info.version == 1 ? 8 : 16),size_offset);