2012-11-05 33 views
13

我嘗試重新創建一個使用ImageMagick命令「convert」組成圖像的腳本。但我想在使用Imagick(版本6.6.2-10)的PHP中做同樣的事情。Imagick:與面具合作

的命令如下:

convert A1.mpc A3.mpc A4.mpc -channel rgba -alpha on -virtual-pixel background -background none -define compose:args=312x26.6776 -compose displace -composite out.mpc 

我發現的參數含義如下:

convert {background} {overlay} [{mask}] [-compose {method}] -composite {result} 

的PHP Imagick給了我撰寫的方法,但不帶口罩參數: http://www.php.net/manual/en/imagick.compositeimage.php

我發現another question並試圖這樣做(但不會產生相同的圖像):

// load images 
$a1 = new Imagick('a1.png'); 
$a3 = new Imagick('a3.png'); 
$a4 = new Imagick('a4.png'); 

// mask the overlay 
$a1->compositeImage($a4, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA); 

// compose overlay to background 
$a1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_BACKGROUND); 
$a1->setImageBackgroundColor(new ImagickPixel('none')); 
$a1->setOption('compose:args', '312x26.6776'); 
$a1->compositeImage($a3, Imagick::COMPOSITE_DISPLACE, 0, 0); 

所以我的問題是:這是正確的方式來使用掩碼組成一個圖像?或者這裏有什麼問題?

爲了幫助可視化是我想做的事情,這裏有一些輸入圖像:

輸入圖像A1(背景):

a1

輸入圖像A3(覆蓋):

a3

輸入圖像a4(mask):

a4

我想要的結果是:

correct output

什麼我的PHP代碼創建:

wrong output

提前感謝! 邁克爾

+1

你爲什麼不使用標誌COMPOSITE_OVERLAY – artragis

回答

2

嘗試使用compositeImage方法和Imagick :: COMPOSITE_COPYOPACITY

0

試試這個代碼:

// x-displacement 
$a3->setImageArtifact('compose:args', "312x0"); 
$a1->compositeImage($a3, Imagick::COMPOSITE_DISPLACE, 0, 0); 

// y-displacement 
$a4->setImageArtifact('compose:args', "0x26.6776"); 
$a1->compositeImage($a4, Imagick::COMPOSITE_DISPLACE, 0, 0); 
+4

雖然這個代碼片斷可能是解決方案,[包括一個解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-基於代碼的答案)確實有助於提高你的文章的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – yivi