我想让图片的一部分变得透明,我尝试了下面的代码,甚至尝试了许多常量作为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);
内部为黄色,黄色不透明
答案 0 :(得分:1)
您需要制作一个与输入大小相同的黑白掩模图像(白色,您希望它是不透明的,黑色,您希望它是透明的)。然后使用等效的-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
通过将其合成到另一个图像(在本例中为棋盘格),您可以看到它是透明的。
转换(-size 640x480 pattern:checkerboard)result.png -compose over -composite result2.jpg
答案 1 :(得分:0)
你试试\ Imagick :: COMPOSITE_COPYOPACITY?
因为那可能是正确的。