如何使用Imagick合并和屏蔽图像?

Den*_*ink 26 php imagemagick imagick

我对图像处理知之甚少,甚至使用的术语也少,所以请耐心等待.

基本上,我想合并两个图像,其中一个将作为一个掩码.该图像看起来像这样:
例
蓝色和黄色背景在现实中都是透明的.

此图像用作常规照片的遮罩."伸出"圆圈的部分照片需要"裁剪"(变得不可见),同时内部仍然可见.
因此,蓝色区域中的所有内容都是隐形的,黄色区域中的所有内容都是可见的.

老实说,我不知道如何去做,所以任何帮助将不胜感激!

编辑:
我使用的是Imagick的API版本,而不是命令行版本

编辑:
为了了解我想要实现的目标,这里有一个例子.

输入图像因此:
在此输入图像描述
这是掩模图像,始终相同

在此输入图像描述
这是动态图片的一个例子

在此输入图像描述
这就是最终结果应该是什么样子

use*_*016 65

所以,最后,这应该做你需要的:

原始图片:

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

不透明面膜:

在此输入图像描述

覆盖:

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

输出:

在此输入图像描述

代码:

<?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;
?>
Run Code Online (Sandbox Code Playgroud)

我希望现在就是这样!注意:在您的示例中,您看起来缩小了基本图像,我没有(我的目标只是展示屏蔽是如何完成的).

  • 我不得不做一个小调整,添加一个检查图像是否有alpha通道使用不同的合成方法:`if($ base-> getImageMatte()){$ base-> compositeImage($ mask,Imagick :: COMPOSITE_DSTIN ,0,0,Imagick :: CHANNEL_ALPHA); } else {$ base-> compositeImage($ mask,Imagick :: COMPOSITE_COPYOPACITY,0,0); }` (2认同)