画像処理の知識がほとんどなく、使用されている用語も少ないため、ご容赦ください。
基本的に、2つの画像を1つにマスクとして機能するようにマージします。その画像は次のようになります。
実際には、青色と黄色の背景がどちらも透明です。
この画像は、通常の写真のマスクとして使用されています。サークルから「はみ出している」写真の一部は、内側を表示したまま、「トリミング」(非表示にする)する必要があります。
青色の領域にあるものはすべて見えず、黄色の領域にあるものはすべて見えます。
正直なところ、どうすればいいのかわからないので、助けていただければ幸いです。
編集:
コマンドラインバージョンではなく、APIバージョンのImagickを使用しています
編集:
私が達成したいことを感じるために、ここに例を示します。
したがって、入力画像は次のとおりです。
これはマスクイメージであり、常に同じです
これは、動的な画像の例です
これが最終結果のようになります
だから、最後に、これはあなたが必要なことをするはずです:
元の画像:
不透明マスク:
オーバーレイ:
出力:
コード:
<?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;
?>
それが今だといいのですが!注:この例では、ベースイメージを縮小したように見えますが、縮小していません(私の目的は、マスキングの方法を示すことだけです)。
このソリューションをここで試しましたか? https://stackoverflow.com/a/2351173/1093649 ?
これをサーバーで実行し(正しいイメージ名を使用して!)、お知らせください。ありがとうございます。
nb:クレジットは jspash に移動します
このタイプのマスキングは、ImageMagickの例、サムネイル、マスク、ペイントでさまざまなテクニックを使用して例示されています http://www.imagemagick.org/Usage/thumbnails/#mask_Paint
ただし、オーバーレイ画像のマスキングとエッジは一致してはならない(SHOULD NOT MATCH)ことが重要です。そうしないと、エッジエイリアシング効果で問題が発生し、回避するのが最善です。
リングのアルファマスクを抽出するには、モルフォロジーオペレーターを使用してそれを中心線まで薄くし、ランダムな「リング」形状のマスクを生成できます。 ImageMagickの例、間引きによるスケルトン、およびプルーニング http://www.imagemagick.org/Usage/morphology/#thinning_skeleton
ImageMagickサンプルのAnthony Thyssen Webマスター、およびImageMagick開発者
PS:Elflingからの素敵な写真
http://www.imagemagick.org/Usage/compose/#dstin でうまくいくはずですが、アルファチャンネル付きの画像を使用する必要があります(問題ありません)。
編集:PHPでそれを渡す必要があります(imagick::COMPOSITE_DSTIN
) compositeimage のパラメータとして。 複合演算子定数 の他のフィルターも役立つ場合があります。