首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP Imagick裁剪蒙版导致暗晕边缘

PHP Imagick裁剪蒙版导致暗晕边缘
EN

Stack Overflow用户
提问于 2021-06-04 08:04:12
回答 2查看 120关注 0票数 1

我有两个png层,都有透明的背景,我正尝试在PHP的Imagick中组合它们。一个是形状,另一个是在该形状上应用的反射。然而,反射是在形状的边缘之外重叠绘制的,所以当在顶部分层时,我需要将它们剪切到形状上(删除不在形状内部的反射部分),并保留alpha通道。

我在网上找到的所有例子都是这样做的;

代码语言:javascript
运行
复制
$shape->compositeImage($reflections, \Imagick::COMPOSITE_DSTIN, 0, 0);

它可以应用和剪裁反射,但它会在反射的柔和边缘周围产生黑色的“光晕”。我相信它正在发生的事情是给反射的柔和alpha边缘一个黑色的背景,然后删除alpha。但是我需要“形状”作为反射的背景,这样反射的边缘就会混合到后面的形状中。

如何在没有暗晕的情况下,将反射应用于形状,并将其剪切到形状内部?我试着应用它,然后在原始形状上裁剪整个东西。这使得反射可以很好地工作,除了现在图形本身在边缘周围有一个黑色的光晕。所以我认为我只是错误地使用了掩码,但我不知道正确的方法是什么。

这是形状图像;

这是反射图像;

这是我目前从上面的代码中得到的;

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-04 09:57:41

从fmw42得到的命令,我设法想出了下面的PHP代码,它似乎做了同样的事情,并且工作正常;

代码语言:javascript
运行
复制
//$shape is my first image, $reflection is my second image, as Imagick instances

//extract shape alpha channel
$shapeAlpha = clone $shape;
$shapeAlpha->separateimagechannel(\Imagick::CHANNEL_ALPHA);

//extract reflection alpha channel
$reflectionAlpha = clone $reflection;
$reflectionAlpha->separateimagechannel(\Imagick::CHANNEL_ALPHA);

//merge both alpha channels
$shapeAlpha->compositeImage($reflectionAlpha, \Imagick::COMPOSITE_MULTIPLY, 0, 0);
$combinedAlpha = clone $shapeAlpha;
    
//clip the reflection with the combined alpha channel
$reflection->setImageMatte(false);
$combinedAlpha->setImageMatte(false);
$reflection->compositeImage($combinedAlpha, \Imagick::COMPOSITE_COPYOPACITY, 0, 0);

//apply the reflection to the shape
$shape->compositeImage($reflection, \Imagick::COMPOSITE_OVER, 0, 0);

//$shape is now the final composite image as intended, no dark halo
票数 1
EN

Stack Overflow用户

发布于 2021-06-04 08:27:18

我不太了解Imagick。下面是如何在ImageMagick命令行中执行此操作。将命令转换为Imagick应该相对容易。

基本上,您分离两个图像的alpha通道,然后将它们相乘,以使用斑点alpha裁剪高光alpha。然后将结果作为新的alpha通道放回高光图像中。然后将结果合成为斑点图像上的新高亮图像。

代码语言:javascript
运行
复制
convert blob.png highlight.png -alpha extract -compose multiply -composite new_highlight_alpha.png

convert highlight.png new_highlight_alpha.png -alpha off -compose copy_opacity -composite new_highlight.png

convert blob.png new_highlight.png -compose over -composite result.png

那么,这是您想要的结果吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67829996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档