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

时间:2012-01-02 09:31:19

标签: php imagemagick imagick

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

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

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

老实说,我不知道如何去做,所以任何帮助都会非常感激!

修改
我使用的是Imagick的API版本,而不是命令行版本

修改
为了了解我想要实现的目标,这里有一个例子。

输入图像因此:
enter image description here
这是掩模图像,总是相同的

enter image description here
这是动态图片的一个例子

enter image description here
这就是最终结果应该是什么样的

4 个答案:

答案 0 :(得分:62)

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

  

原始图片:

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;
?>

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

答案 1 :(得分:1)

您是否按照以下所述尝试此解决方案:https://stackoverflow.com/a/2351173/1093649

在你的服务器中运行它(使用正确的图像名称!),并告诉我们,谢谢。

nb:credit to jspash

答案 2 :(得分:0)

http://www.imagemagick.org/Usage/compose/#dstin应该可以解决这个问题,但你需要使用带有alpha通道的图像(这应该不是问题)。

编辑:在PHP中,您必须将其作为compositeimage中的参数传递(imagick::COMPOSITE_DSTIN)。 Composite Operator Constants中的其他过滤器也可能对您有用。

答案 3 :(得分:0)

这种类型的掩蔽是使用许多不同的技术来实例化的 ImageMagick示例,缩略图,蒙版和绘画    http://www.imagemagick.org/Usage/thumbnails/#mask_paint

但请注意,覆盖图像的遮蔽和边缘应该不匹配 这很重要,否则你可能会遇到最好避免的边缘别名效应问题。

提取环的alpha蒙版,可以使用形态学运算符将其细化到中心线,可用于为任何随机“环”形状生成蒙版。 ImageMagick示例,细化的骷髅和修剪   http://www.imagemagick.org/Usage/morphology/#thinning_skeleton

安东尼蒂森 ImageMagick示例的Web Master和ImageMagick的Developer

PS:来自Elfling的漂亮照片