#include "MagickCore/blob.h"
#include "MagickCore/blob-private.h"
#include "MagickCore/cache.h"
+#include "MagickCore/channel.h"
#include "MagickCore/colormap.h"
#include "MagickCore/colorspace.h"
#include "MagickCore/colorspace-private.h"
}
static MagickBooleanType ParseImageResourceBlocks(Image *image,
- const unsigned char *blocks,size_t length,ExceptionInfo *exception)
+ const unsigned char *blocks,size_t length,
+ MagickBooleanType *has_merged_image,ExceptionInfo *exception)
{
const unsigned char
*p;
image->units=PixelsPerInchResolution;
break;
}
+ case 0x0421:
+ {
+ if (*(p+4) == 0)
+ *has_merged_image=MagickFalse;
+ }
default:
{
p+=count;
*image;
MagickBooleanType
+ has_merged_image,
skip_layers,
status;
image->alpha_trait=UndefinedPixelTrait;
}
}
+ has_merged_image=MagickTrue;
length=ReadBlobMSBLong(image);
if (length != 0)
{
blocks=(unsigned char *) RelinquishMagickMemory(blocks);
ThrowReaderException(CorruptImageError,"ImproperImageHeader");
}
- (void) ParseImageResourceBlocks(image,blocks,(size_t) length,exception);
+ (void) ParseImageResourceBlocks(image,blocks,(size_t) length,
+ &has_merged_image,exception);
blocks=(unsigned char *) RelinquishMagickMemory(blocks);
}
/*
}
offset=TellBlob(image);
skip_layers=MagickFalse;
- if ((image_info->number_scenes == 1) && (image_info->scene == 0))
+ if ((image_info->number_scenes == 1) && (image_info->scene == 0) &&
+ (has_merged_image != MagickFalse))
{
if (image->debug != MagickFalse)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
if (image->debug != MagickFalse)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
" reading the precombined layer");
- (void) ReadPSDMergedImage(image,&psd_info,exception);
+ if (has_merged_image != MagickFalse || GetImageListLength(image) == 1)
+ (void) ReadPSDMergedImage(image,&psd_info,exception);
+ else
+ {
+ Image
+ *merged;
+
+ SetImageAlphaChannel(image,TransparentAlphaChannel,exception);
+ image->background_color.alpha=TransparentAlpha;
+ merged=MergeImageLayers(image,FlattenLayer,exception);
+ ReplaceImageInList(&image,merged);
+ }
(void) CloseBlob(image);
return(GetFirstImageInList(image));
}