2012-01-02 22 views
25

私は画像処理はごくわずかであり、使用される用語はそれほどではありませんので、私にご負担ください。Imagickを使ってイメージをマージしてマスクする方法は?

基本的には、2つの画像を1つのマスクとして機能させるために、2つの画像を結合したいと考えています。その画像は次のようになります。
Example
実際には青と黄色の背景が両方とも透明です。

この画像は通常の写真用のマスクとして使用されています。円の中に「はみ出している」写真の部分は、内側が目に見える状態で「切り取られる」(見えないようにする)必要があります。
青色の領域に入っているものはすべて目に見えないので、黄色い領域のすべてが表示されます。

私は正直なところ手がかりがないので、どんな助けでも大歓迎です!

編集:
は私が達成したいものの感触をつかむために、ここでの例です:
私はImagickのAPIバージョンは、[編集]

ないコマンドラインバージョンを使用します。

入力画像は、このようにしている:
enter image description here
これは、マスク画像であり、常に同じ

enter image description here
これは、画像の一例であり、ダイナミック

enter image description here
これは、何最終結果は次のようになります

+0

は、私は本当にこの質問に対する答えを必要とします。私の知識はそれ自身で研究するにはあまりにも限られているので、私は賞金を始めているのです。質問を改善する必要がある場合、私はそれを喜んで行います。 –

+0

はコマンドラインのバージョンのヘルプですか? –

+0

APIで処理できない場合は、CLIに頼らざるを得ませんが、APIバージョンに対して強い支持を得ています。 –

答えて

59

に行き、最終的には、これはあなたが必要なものを行う必要があります。

オリジナル画像:

http://i.stack.imgur.com/b7seR.png

不透明マスク:

enter image description here

オーバーレイ:

http://i.stack.imgur.com/3ulkM.png

出力:

enter image description here

コード:

<?php 
$base = new Imagick('U0R4F.png'); 
$mask = new Imagick('mask.png'); 
$over = new Imagick('3ulkM.png'); 

// Setting same size for all images 
$base->resizeImage(274, 275, Imagick::FILTER_LANCZOS, 1); 

// Copy opacity mask 
$base->compositeImage($mask, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA); 

// Add overlay 
$base->compositeImage($over, Imagick::COMPOSITE_DEFAULT, 0, 0); 

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

echo $base; 
?> 

私はそれが今願っています! 注:あなたの例では、基本イメージを縮小したように見えますが、私はそれをしませんでした(私の目標は、マスキングがどのように行われるかを示すことです)。

+0

これは有望そうです!マスク画像を作成してこのコードをテストします。 –

+0

ええ、スケールアップが起こるはずです。私は今、新しいコードをテストするつもりです。 –

+1

偉大な、これはほぼ完璧です! 1つの問題は、元の画像の透明性が黒に変換されることです。アルファチャンネルを維持する方法はありますか? –

0

http://www.imagemagick.org/Usage/compose/#dstinはすべきことですが、アルファチャンネルの画像を使用する必要があります(これは問題ではありません)。

編集:PHPでは、パラメータとしてcompositeimageに(imagick::COMPOSITE_DSTIN)を渡す必要があります。 Composite Operator Constantsの他のフィルタも役立ちます。

+0

これは本当に役に立ちません。もちろん、私はcompose関数を見つけましたが、必要な結果を作成するために利用できるツールをどのように組み合わせるか分かりません。 –

1

ここでこの解決策を試しましたか。https://stackoverflow.com/a/2351173/1093649

サーバーでこれを正しいイメージ名で実行してください!ありがとうございます。

NB:クレジットだからjspash

+0

私はすでにそれを見つけましたが、本当に私が望むことはしません。その答えの正味の効果は、画像内の青色と黄色の部分が透明のままであり、黒色の境界線が「背景」の画像を表示することです。 –

+0

あまりにも悪いことに、あなたの投稿に元の画像を添付できますか?そうすれば、あなたはどこから始まったのか、より良い考えを得ることができます。 –

+0

サンプルの入力と出力の画像で質問を更新しました。 –

0

マスキングのこのタイプは、サムネイル、 ImageMagickの例における多数の異なる技術を用いてexampledマスクおよびマスキング及びオーバーレイ画像のエッジが これと一致してはならないことが警告され http://www.imagemagick.org/Usage/thumbnails/#mask_paint

ペイントされます重要であるか、または回避するのが最善のエッジエイリアシングエフェクトに問題が発生する可能性があります。

モルフォロジー演算子を使用してリングのアルファマスクを抽出すると、それを中心線まで細くして、任意の「リング」形状のマスクを生成することができます。 ImageMagickの例、薄くすることでスケルトン、およびプルーニング http://www.imagemagick.org/Usage/morphology/#thinning_skeleton

アンソニー・ティッセン ウェブImageMagickの例のためのマスター、そしてImageMagickの

PSのための開発者:Elfling

から素敵な写真
関連する問題