2014-01-07 51 views
1

我希望使用IMagick将图像的一部分(或实际上,几个部分)透明化,以便我可以将它用作不同图像上的遮罩。我无法想出任何以简单的方式做到这一点的方法。使图像的一部分与IMagick/ImageMagick透明

所以说我的出发图像被表示为以下,其中X是任何颜色:

XXXXXXXXXXXXX 
XXXXXXXXXXXXX 
XXXXXXXXXXXXX 
XXXXXXXXXXXXX 
XXXXXXXXXXXXX 

然后,我希望能够做出一定的矩形区域透明的(所以它结束了一个有点像凸模卡):

XXXXXXXXXXXXX 
X XXXXXXXXXX 
X XXXX XXXX 
XXXXXXX XXXX 
XXXXXXXXXXXXX 

有没有人知道这样做的好方法?谢谢。

+0

会喜欢[this](http://stackoverflow.com/questions/1741488/using-a-transparent-png-as-a-clip-mask)为你工作? – PinnyM

+1

可能重复的[php imagick,如何使区域透明](http://stackoverflow.com/questions/12349549/php-imagick-how-to-make-an-area-transparent) – AndreKR

回答

1

想通了。

//Open your image and get its dimensions 
$image = new Imagick('image.png'); 
$height = $image->getImageHeight(); 
$width = $image->getImageWidth(); 

//Create a new transparent image of the same size 
$mask = new Imagick(); 
$mask->newImage($width, $height, new ImagickPixel('none')); 
$mask->setImageFormat('png'); 

//Draw onto the new image the areas you want to be transparent in the original 
$draw = new ImagickDraw(); 
$draw->setFillColor('black'); 
$draw->rectangle(10,10,100,100); 
$mask->drawImage($draw); 

//Composite the images using Imagick::COMPOSITE_DSTOUT 
$image->compositeImage($mask, Imagick::COMPOSITE_DSTOUT, 0, 0, Imagick::CHANNEL_ALPHA); 
+0

谢谢,这只是我需要什么。 –

+0

不适用于我,面具的“黑色”部分就像透明,对主图像没有任何影响。 – Suge