]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Tue, 18 May 2010 00:52:09 +0000 (00:52 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Tue, 18 May 2010 00:52:09 +0000 (00:52 +0000)
ChangeLog
coders/psd.c

index ae18ec27e40a561baa61a41c3eaa50036fea1e99..d87c0ec3bd8a0aa1ae459f42670fa76a09764586 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,5 @@
 2010-05-17  6.6.2-0 Cristy  <quetzlzacatenango@image...>
-  * 
+  * PSD images require a proper layer to support an alpha channel.
 
 2010-05-15  6.6.1-10 Cristy  <quetzlzacatenango@image...>
   * Use ScaleCharToQuantum() in coders/src.c (reference
index 34788de86ee20e5fbbfca9f44c8081f0d1a292b0..58f2699a48ccdf262ad344487c23ef178f6a01f0 100644 (file)
@@ -1984,7 +1984,7 @@ static MagickBooleanType WritePSDImage(const ImageInfo *image_info,Image *image)
     *icc_profile;
 
   MagickBooleanType
-    invert_layer_count = MagickFalse,
+    invert_layer_count,
     status;
 
   PSDInfo
@@ -2027,6 +2027,7 @@ static MagickBooleanType WritePSDImage(const ImageInfo *image_info,Image *image)
   status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception);
   if (status == MagickFalse)
     return(status);
+  invert_layer_count=MagickFalse;
   packet_size=(size_t) (image->depth > 8 ? 6 : 3);
   if (image->matte != MagickFalse)
     packet_size+=image->depth > 8 ? 2 : 1;
@@ -2181,16 +2182,17 @@ compute_layer_info:
     layer_count++;
     tmp_image = GetNextImageInList(tmp_image);
   }
-
-  /* if the image has a matte, then we need to use layers */
-  if ( layer_count == 0 && image->matte == MagickTrue )
-  {
-  invert_layer_count = MagickTrue;
-  base_image = image;
-  goto compute_layer_info;  /* yes, goto's suck, but it keeps the code cleaner! */
-  }
-
-  if ( layer_count == 0 )
+  if ((layer_count == 0) && (image->matte == MagickTrue))
+    {
+      /*
+        Image with matte channel requires layers.
+      */
+      invert_layer_count=MagickTrue;
+      image->matte=MagickFalse;
+      base_image=image;
+      goto compute_layer_info;
+    }
+  if (layer_count == 0)
     (void) SetPSDSize(&psd_info,image,0);
   else
   {
@@ -2201,12 +2203,10 @@ compute_layer_info:
     else
       rounded_layer_info_size = layer_info_size;
     (void) SetPSDSize(&psd_info,image,rounded_layer_info_size);
-
-    if ( invert_layer_count )
-      layer_count *= -1;  /* if we have a matte, then use negative count! */
+    if (invert_layer_count != MagickFalse)
+      layer_count*=(-1);  /* if we have a matte, then use negative count! */
     (void) WriteBlobMSBShort(image,(unsigned short) layer_count);
-
-    layer_count = 1;
+    layer_count=1;
     tmp_image = base_image;
     tmp_image->compression=NoCompression;
     while ( tmp_image != NULL ) {
@@ -2288,28 +2288,26 @@ compute_layer_info:
         WritePascalString( image, theAttr, 4 );
       }
       tmp_image = GetNextImageInList(tmp_image);
-    };
-
-     /* now the image data! */
+    }
+    /* now the image data! */
     tmp_image = base_image;
     while ( tmp_image != NULL ) {
       status=WriteImageChannels(&psd_info,image_info,image,tmp_image,MagickTrue);
-
       /* add in the pad! */
        if ( rounded_layer_info_size != layer_info_size )
          (void) WriteBlobByte(image,'\0');
 
       tmp_image = GetNextImageInList(tmp_image);
     };
-
     /* user mask data */
-     (void) WriteBlobMSBLong(image, 0);
-
+    (void) WriteBlobMSBLong(image,0);
   }
-
-  /* now the background image data! */
+  /*
+    Write composite image.
+  */
+  if (invert_layer_count != MagickFalse)
+    image->matte=MagickTrue;
   status=WriteImageChannels(&psd_info,image_info,image,image,MagickFalse);
-
   (void) CloseBlob(image);
   return(status);
 }