]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sun, 4 Jan 2015 21:10:37 +0000 (21:10 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sun, 4 Jan 2015 21:10:37 +0000 (21:10 +0000)
MagickWand/mogrify.c
MagickWand/operation.c

index 820d38d23535028686507d0d532359b46276e1cb..b5350c194449dcdb1c9253debb599c9ef0cf5b57 100644 (file)
@@ -7777,19 +7777,38 @@ WandExport MagickBooleanType MogrifyImageList(ImageInfo *image_info,
             GravityAdjustGeometry(image->columns,image->rows,image->gravity,
               &geometry);
             mask_image=RemoveFirstImageFromList(images);
-            if (mask_image != (Image *) NULL)
+            if (mask_image == (Image *) NULL)
+              (void) CompositeImage(image,composite_image,image->compose,
+                clip_to_self,geometry.x,geometry.y,exception);
+            else
               {
                 if ((image->compose != DisplaceCompositeOp) &&
                     (image->compose != DistortCompositeOp))
-                  status&=CompositeImage(composite_image,mask_image,
-                    IntensityCompositeOp,MagickTrue,0,0,exception);
-                else
-                  status&=CompositeImage(composite_image,mask_image,
-                    CopyGreenCompositeOp,MagickTrue,0,0,exception);
+                  {
+                    status&=CompositeImage(composite_image,mask_image,
+                      CopyGreenCompositeOp,MagickTrue,0,0,exception);
+                    (void) CompositeImage(image,composite_image,image->compose,
+                      clip_to_self,geometry.x,geometry.y,exception);
+                  }
+                 else
+                  {
+                    Image
+                      *clone_image;
+
+                    clone_image=CloneImage(image,0,0,MagickTrue,exception);
+                    if (clone_image == (Image *) NULL)
+                      break;
+                    (void) CompositeImage(image,composite_image,image->compose,
+                      clip_to_self,geometry.x,geometry.y,exception);
+                    status&=CompositeImage(image,mask_image,
+                      CopyAlphaCompositeOp,MagickTrue,0,0,exception);
+                    status&=CompositeImage(clone_image,image,OverCompositeOp,
+                      clip_to_self,geometry.x,geometry.y,exception);
+                    image=DestroyImage(image);
+                    image=clone_image;
+                  }
                 mask_image=DestroyImage(mask_image);
               }
-            (void) CompositeImage(image,composite_image,image->compose,
-              clip_to_self,geometry.x,geometry.y,exception);
             composite_image=DestroyImage(composite_image);
             *images=DestroyImageList(*images);
             *images=image;
index e2701d551401d18619d89cbe2c4569a15cf459c5..81c3ea0ce20119a411cd1840f95504652d66dfb1 100644 (file)
@@ -3823,19 +3823,38 @@ WandPrivate MagickBooleanType CLIListOperatorImages(MagickCLI *cli_wand,
           GravityAdjustGeometry(new_images->columns,new_images->rows,
             new_images->gravity, &geometry);
           mask_image=RemoveFirstImageFromList(&_images);
-          if (mask_image != (Image *) NULL)
+          if (mask_image == (Image *) NULL)
+            status&=CompositeImage(new_images,source_image,compose,clip_to_self,
+              geometry.x,geometry.y,_exception);
+          else
             {
-              if ((compose != DisplaceCompositeOp) &&
-                  (compose != DistortCompositeOp))
-                status&=CompositeImage(source_image,mask_image,
-                  IntensityCompositeOp,MagickTrue,0,0,_exception);
+              if ((compose == DisplaceCompositeOp) ||
+                  (compose == DistortCompositeOp))
+                {
+                  status&=CompositeImage(source_image,mask_image,
+                    CopyGreenCompositeOp,MagickTrue,0,0,_exception);
+                  status&=CompositeImage(new_images,source_image,compose,
+                    clip_to_self,geometry.x,geometry.y,_exception);
+                }
               else
-                status&=CompositeImage(source_image,mask_image,
-                  CopyGreenCompositeOp,MagickTrue,0,0,_exception);
+                {
+                  Image
+                    *clone_image;
+
+                  clone_image=CloneImage(new_images,0,0,MagickTrue,_exception);
+                  if (clone_image == (Image *) NULL)
+                    break;
+                  status&=CompositeImage(new_images,source_image,compose,
+                    clip_to_self,geometry.x,geometry.y,_exception);
+                  status&=CompositeImage(new_images,mask_image,
+                    CopyAlphaCompositeOp,MagickTrue,0,0,_exception);
+                  status&=CompositeImage(clone_image,new_images,OverCompositeOp,
+                    clip_to_self,geometry.x,geometry.y,_exception);
+                  new_images=DestroyImage(new_images);
+                  new_images=clone_image;
+                }
               mask_image=DestroyImage(mask_image);
             }
-          status&=CompositeImage(new_images,source_image,compose,clip_to_self,
-            geometry.x,geometry.y,_exception);
           source_image=DestroyImage(source_image);
           break;
         }