2016-03-21 3 views
1

私は2つのグラフィックファイルを持っています。 JPG形式の背景画像2つのグラフィックファイルをマージするにはどうすればよいですか? (PHP、Imagick)

第二のファイル - -

最初の画像が白で満たされた中央の図とPNGファイル、パス上の黒枠を有します。透明なPNGファイルの主な背景。

質問: 2つのファイルを透明にマージする方法(画像例を参照)最初のファイルの背景は、2番目のファイルの図の中に配置する必要があります。

スキーム:

example images

画像:

PNGファイル - profiles.in.ua/tmp/sample2.jpg

JPGファイル - profiles.in.ua/tmp/sample1.png

PHPコード:残るべき(マスク画像は、常に黒のピクセルは(パターンを上書きするべきである)、(パターンで上書きされなければならない)、白画素の排他的に構成されていると仮定すると、透明画素

$mask = new Imagick(realpath('mask.png')); 
$pattern = new Imagick(realpath('pattern.jpg')); 
$pattern->resizeImage($mask->width, $mask->height, Imagick::FILTER_LANCZOS, 1); 
$pattern->compositeImage($mask, Imagick::COMPOSITE_ATOP, 0, 0); 
header("Content-Type: image/png"); 
echo $pattern->getImageBlob(); 
$mask->destroy(); 
$pattern->destroy(); 
+0

あなたの管理者spaces.ruを?コードスニペットにタグコードを使用できますか? – Naumov

答えて

2

透明)では、マスク内の非透明ピクセルにパターンを合成し、その結果をマスクで暗くすることでこの効果を得ることができます。

指定したPNGファイルの背景が透明ではありませんでした。代わりに、白とグレーの孵化でした。このコードを処理する前に、最初に透明な背景を追加するために編集しなければなりませんでした。

$mask = new Imagick(realpath('sample1.png')); 
$pattern = new Imagick(realpath('sample2.jpg')); 
$pattern->resizeImage($mask->width, $mask->height, Imagick::FILTER_LANCZOS, 1); 

$image = clone($mask); 
$image->compositeImage($pattern, Imagick::COMPOSITE_IN, 0, 0); 
$image->compositeImage($mask, Imagick::COMPOSITE_DARKEN, 0, 0); 

header("Content-Type: image/png"); 
echo $image; 

$image->destroy(); 
$mask->destroy(); 
$pattern->destroy(); 
+0

作業中!どうもありがとうございます!あなたは本当に助けてくれました! :) – Nikolay

0

コードの最後を修正する必要があります。終わりまではすべていいです。

$base->writeImage('output.png'); 
header("Content-Type: image/png"); 
echo $base; 

私を更新します:)

+0

作業中!どうもありがとうございます!あなたは本当に助けてくれました! :) – Nikolay

+0

投票に追記してください! –

関連する問題