2017-10-27 9 views
0

私はイメージの一部を透明にしたい、私は下のコードを試しても、COMPOSITE_DSTOUTとして多くの定数を試してみましたが、すべてがうまくいかなかった、どのように知っていますか? イメージの指定領域をImagickで透明にするにはどうすればいいですか?

$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); 

は黄色

result image

答えて

1

入力のサイズに白黒のマスクイメージを作成する必要があります(白は不透明、黒は透明にします)。次に、-compose copyopacity -compositeに相当するものを使用して、マスクを画像のアルファチャンネルに配置します。申し訳ありませんが、私はImagickをコーディングしません。ここで

はImageMagickのコマンドライン構文を使用した例です。

入力:

enter image description here

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 

enter image description here

あなたはそれが別の画像の上に合成することにより、透明で見ることができます(この場合チェッカーボード)。

変換(-size 640×480パターン:チェッカーボード)result.png -compose -composite result2.jpg

enter image description here

0
では透明ではなく、黄色の内側に黒のガット

あなたは\ Imagick :: COMPOSITE_COPYOPACITYを試しますか?

これはおそらく正しいでしょう。

+0

はい、私はこのオプションを試してみました以上は、まだ動作しません。 – Suge

+0

はい、Danackは正しいです。しかしそれだけではありません。上記の投稿と例を参照してください。 – fmw42

関連する問題