2016-05-13 79 views
1

是否可以做到以下幾點:使用compositeImage設置不透明度像素的繪圖

我有兩個圖像,一個是從畫布中的背景是透明的圖。另一個是灰度圖,其中每個像素是白色或黑色。

我想找到一種方法將原始圖形中的像素設置爲完全不透明度,其中黑色像素存在於第二個圖像中。

我會提供輸入圖紙,以及我想要擺脫的內容。輸出是由我繪製的,而我想使用compositeImage或其他Imagick調用來實現我的目標。

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

再次,它們都.png格式,但intput和輸出具有不透明度,其中,中間的一個是灰度。

回答

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

+1

我用不同的技術進行試驗,但沒有保持從非透明像素的alpha通道在原始圖像中在一天結束時。哪些工作,但低於我想要的標準。 您的解決方案非常完美。 – justynnuff

+0

請記住這兩個alpha通道是基本的黑白圖像,可以[以不同的方式組合](http://www.imagemagick.org/Usage/compose/tables/)。 – emcconville