From: cristy Date: Sun, 4 Jan 2015 21:10:37 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~1498 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=052d1f731e137ec086ffcef53d586dbd3f100eca;p=imagemagick --- diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c index 820d38d23..b5350c194 100644 --- a/MagickWand/mogrify.c +++ b/MagickWand/mogrify.c @@ -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; diff --git a/MagickWand/operation.c b/MagickWand/operation.c index e2701d551..81c3ea0ce 100644 --- a/MagickWand/operation.c +++ b/MagickWand/operation.c @@ -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; }