如何使用Imagick使图像的指定区域透明?

时间:2017-10-27 08:43:07

标签: php imagemagick imagick

我想让图片的一部分变得透明,我尝试了下面的代码,甚至尝试了许多常量作为COMPOSITE_DSTOUT,但所有都没有用,有人知道怎么做吗?

$fooImage->newImage(256, 256, new ImagickPixel('transparent'));
$Image->compositeImage($fooImage, Imagick::COMPOSITE_DSTOUT, $offsetX, offsetY);

我测试了下面的代码,只是变黄了,黑色,不透明:

$width = 256;
$height = 256;

$image = new Imagick();
$image->newImage($width, $height, new ImagickPixel('yellow'));

$x = 50;
$y = 100;
$fooWidth = 100;
$fooHeight = 60;

//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($x, $y, $x + $fooWidth, $y + $fooHeight);
$mask->drawImage($draw);

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

$image->setImageFormat('png');
$image->writeImage($path);

内部为黄色,黄色不透明

result image

2 个答案:

答案 0 :(得分:1)

您需要制作一个与输入大小相同的黑白掩模图像(白色,您希望它是不透明的,黑色,您希望它是透明的)。然后使用等效的-compose copyopacity -composite将蒙版放入图像的alpha通道。对不起,我不编码Imagick。

以下是使用ImageMagick命令行语法的示例:

输入:

enter image description here

convert logo.jpg \( -size 640x480 xc:white -size 200x200 xc:black -geometry +200+100 -compose over -composite \) +geometry -alpha off -compose copy_opacity -composite result.png

enter image description here

通过将其合成到另一个图像(在本例中为棋盘格),您可以看到它是透明的。

转换(-size 640x480 pattern:checkerboard)result.png -compose over -composite result2.jpg

enter image description here

答案 1 :(得分:0)

你试试\ Imagick :: COMPOSITE_COPYOPACITY?

因为那可能是正确的。