使用compositeImage在图形中设置像素不透明度

时间:2016-05-13 18:48:08

标签: php imagemagick imagick

是否可以执行以下操作:

我有两张图片,一张是画布中的画,背景是透明的。另一个是灰度图,每个像素都是白色或黑色。

我想找到一种方法将原始图形中的像素设置为完全不透明度,而第二张图像中存在黑色像素。

我将提供输入图纸,以及我想要了解的内容。输出由我绘制,而我想使用compositeImage或其他Imagick调用来实现我的目标。

输入1:Input 1输入2 Input 2输出Output Image

同样,它们都是.png格式,但输入和输出具有不透明度,其中中间的是灰度。

1 个答案:

答案 0 :(得分:2)

我相信你想要的技术是合成两个alpha通道,然后复制结果作为原始图像的新alpha通道。例如......

$drawing = new Imagick('drawing.png');
$mask = new Imagick('mask.png');
// Extract original alpha channel from drawing.
$base_opacity = clone $drawing;
$base_opacity->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
// Composite both alpha channels
$base_opacity->compositeImage($mask, Imagick::COMPOSITE_MULTIPLY, 0 ,0);
// Copy new `base_opacity` as alpha channel
$drawing->compositeImage($base_opacity, Imagick::COMPOSITE_COPYOPACITY, 0 ,0);

以上是上述行的逐步预览。

// Extract original alpha channel from drawing.
$base_opacity = clone $drawing;
$base_opacity->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);

base_opacity

// Composite both alpha channels
$base_opacity->compositeImage($mask, Imagick::COMPOSITE_MULTIPLY, 0 ,0);

base_opacity2.png

// Copy new `base_opacity` as alpha channel
$drawing->compositeImage($base_opacity, Imagick::COMPOSITE_COPYOPACITY, 0 ,0);

final