我相信你想要的技术是合成两个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);
// 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);
我用不同的技术进行试验,但没有保持从非透明像素的alpha通道在原始图像中在一天结束时。哪些工作,但低于我想要的标准。 您的解决方案非常完美。 – justynnuff
请记住这两个alpha通道是基本的黑白图像,可以[以不同的方式组合](http://www.imagemagick.org/Usage/compose/tables/)。 – emcconville