Page 1 of 1

Gradient using Magickwand??

Posted: 2008-11-06T22:21:50-07:00
by jumpman25
I am trying to make a reflection shadow like you see here http://cow.neondragon.net/stuff/reflection/

Is there anyway to do a gradient using Magickwand?

Code: Select all

$canvas=NewMagickWand();
MagickNewImage($canvas,500, 600, $bk_color);

//copy and flip image
$add_wand2 = CloneMagickWand($add_wand);
MagickFlipImage($add_wand2); 

MagickCompositeImage( $canvas, $add_wand, MW_OverCompositeOp, 0, 0);
MagickCompositeImage( $canvas, $add_wand2, MW_OverCompositeOp, 0, 400);
The code does everything for me except to fade the reflection from full color to transparent.

Re: Gradient using Magickwand??

Posted: 2008-11-07T08:54:54-07:00
by el_supremo
I've added an example of this to my MagickWand Examples in C (see URL in my sig).
The reflection is half the height of the original image (just for added effect) but you can omit that step if you like.
The basic reflection is done by creating a white-black gradient and using that as the opacity of the reflection image.

Pete

Re: Gradient using Magickwand??

Posted: 2008-11-07T20:29:59-07:00
by jumpman25
thanks el_supremo

however the code seems to hang up on

Code: Select all

MagickSetImageAlphaChannel($mw, MW_DeactivateAlphaChannel);
is there any other way to deactivate the alpha channel in the image?

Code: Select all

<?php
	$mw = NewMagickWand();
	MagickReadImage($mw,"strawberry.png");

	// we need to get the dimensions of the image
	$w = MagickGetImageWidth($mw);
	$h = MagickGetImageHeight($mw);

	// +matte is the same as -alpha off
MagickSetImageAlphaChannel($mw, MW_DeactivateAlphaChannel);

	// clone the input image
	$mwr = CloneMagickWand($mw);

	// Resize it and flip the image
	MagickResizeImage($mwr,$w,$h/2,MW_LanczosFilter,1);
	MagickFlipImage($mwr); 

	// Create the gradient image which will be used as the alpha
	// channel in the reflection image
	$mwg = NewMagickWand();
	MagickSetSize($mwg,$w,$h/2);
	MagickReadImage($mwg,"gradient:white-black");

	// Copy the gradient in to the alpha channel of the reflection image
	MagickCompositeImage($mwr,$mwg,MW_CopyOpacityCompositeOp,0,0);

	// Add the reflection image to the wand which holds the original image
	MagickAddImage($mw,$mwr);
	// Destroy and reuse $mwg as the result image after the appen
	if($mwg) $mwg = DestroyMagickWand($mwg);

	// Append the reflection to the bottom (MagickTrue) of the original image
	$mwg = MagickAppendImages($mw,true);


	MagickSetFormat($mwg, "png");
	header( 'Content-Type: image/png');
	MagickEchoImageBlob($mwg);
?>  


Re: Gradient using Magickwand??

Posted: 2008-11-08T08:21:17-07:00
by el_supremo
Earlier versions of IM used:

Code: Select all

	MagickSetImageMatte(mw,MagickFalse);
Pete

Re: Gradient using Magickwand??

Posted: 2008-12-10T15:53:55-07:00
by justin
This seems like a great example to start from, but I'm confused by:

MagickReadImage($mwg,"gradient:white-black");

What's "gradient:white-black" doing?

When I tried it I got:

Fatal error: magickreadimage(): C API cannot read the format "gradient:white-black" (reason: unrecognized color ...

Hey el_supremo your example on your page doesn't link to code by the way?

Thanks!

Re: Gradient using Magickwand??

Posted: 2008-12-10T17:06:44-07:00
by el_supremo
C API cannot read the format "gradient:white-black"
Which version of ImageMagick are you using? In recent versions of ImageMagick this creates an image containing a gradient from white to black.
your example on your page doesn't link to code by the way?
I'm fixing that up right now. Thanks.

Pete

Re: Gradient using Magickwand??

Posted: 2008-12-10T17:57:18-07:00
by justin
I'm using PHP MagickWand 1.0.6 and
#:~$ MagickWand-config --version
6.3.7 Q16

#:~$ convert --version
Version: ImageMagick 6.3.7 02/18/08 Q16 http://www.imagemagick.org

Re: Gradient using Magickwand??

Posted: 2008-12-10T20:34:06-07:00
by el_supremo
I think gradients such as the one in my example were alreadyworking in 6.3.7 so I don't know why it would fail for you. The only thing I can suggest is t oupgrade if you can.

Pete

Re: Gradient using Magickwand??

Posted: 2008-12-11T10:37:54-07:00
by justin
I finally got 1.0.7 to build, and I just noticed my php_imagick module on the server is version 2.0.1 ( using 2.2.1-dev on my windows machine ).

So, I'm guessing that's the problem. I'll have to uninstall it and compile it instead of using the module from Aptitude.

That's not something I can do over lunch so it'll have to wait until Saturday.

I'm keeping a log of my progress:
http://www.tehuber.com/article.php?stor ... 2101503428