From: Dirk Lemstra Date: Sat, 23 Sep 2017 09:45:42 +0000 (+0200) Subject: Fixed writing multiple layers from the tiff writer. X-Git-Tag: 7.0.7-4~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bdbc14590ce8179ba62aade655776a71adc27f63;p=imagemagick Fixed writing multiple layers from the tiff writer. --- diff --git a/coders/psd.c b/coders/psd.c index a7f09b23b..12924ec22 100644 --- a/coders/psd.c +++ b/coders/psd.c @@ -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);