tags:

views:

854

answers:

2

Is it possible to take this image:

image1

And apply this mask:

mask

And turn it into this:

image2

Using either GD or Imagick? I know it's possible to mask an image using shapes but I'm not sure how to go on about doing it with a pre-created alphatransparent image. :s

+1  A: 

I think you are looking for imagealphablending. I use it for watermarks, and I believe it will do the effect you are looking for.

Cryophallion
No I don't believe it does. I'm not merging images, I'm using one image to mask an existing image. The result image is alphatransparent.
Jedi
Reverse your mask. Make the center trans, and the edges fade to white. Then crop or scale your image to the mask size. This assumes a white background of course.If white isn't workable, are you doing black and white? If so, take an odd color (bright pink or chroma green, both of which may work if you have color as well). Make the true color image and the mask that color, then set that palette color transparent.So, yes, I think it will work, just need to try it from all angles.
Cryophallion
+3  A: 

Using Imagick and ImageMagick version > 6 (I don't know if it will work on older versions):

// Set image path
$path = '/path/to/your/images/';

// Create new objects from png's
$dude = new Imagick($path . 'dude.png');
$mask = new Imagick($path . 'dudemask.png');

// IMPORTANT! Must activate the opacity channel
// See: http://www.php.net/manual/en/function.imagick-setimagematte.php
$dude->setImageMatte(1); 

// Create composite of two images using DSTIN
// See: http://www.imagemagick.org/Usage/compose/#dstin
$dude->compositeImage($mask, Imagick::COMPOSITE_DSTIN, 0, 0);

// Write image to a file.
$dude->writeImage($path . 'newimage.png');

// And/or output image directly to browser
header("Content-Type: image/png");
echo $dude;
jspash
Thanks! I was looking for this! Works great.
acme