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

How to make specified area of an image transparent with 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);

黄里黑,黄里不透

你试试 \Imagick::COMPOSITE_COPYOPACITY 吗?

因为这可能是正确的。

您需要根据输入的大小制作黑白遮罩图像(白色不透明,黑色透明)。然后使用等效的 -compose copyopacity -composite 将蒙版放入图像的 alpha 通道中。抱歉,我不会编写 Imagick。

这是一个使用 ImageMagick 命令行语法的示例:

输入:

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

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

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