1

我需要对 2 张图像执行Source In 合成。

例如这个图像: 和一个蒙版图像(用黑色透明和黑白测试):
来源

面具

应该产生结果:
结果图像

我正在尝试使用ImageSharp做到这一点:

img.Mutate(imgMaskIn =>
{
    using (var mask = Image.Load(maskImageFileName))
    {
        imgMaskIn.DrawImage(mask, new GraphicsOptions { AlphaCompositionMode = PixelAlphaCompositionMode.SrcIn});
    }
});

但结果是蒙版图像。它应该基于这个合并请求工作。
我错误地使用了库,还是有错误?

在 ASP.NET Core 中有没有其他方法可以做到这一点?

4

1 回答 1

4

不幸的是,使用ImageSharp执行此操作的语法在当前预览版本和开发版本之间发生变化,这应该是最终的 API。

使用1.0.0-beta0005,您可以像这样混合这些图像:

using (var pattern = Image.Load("img_pattern.png"))
using (var texture = Image.Load("img_texture.png"))
{
    var options = new GraphicsOptions { BlenderMode = PixelBlenderMode.In };
    using (var result = pattern.Clone(x => x.DrawImage(options, texture)))
    {
        result.Save("img_out.png");
    }
}

请注意,您必须为此使用具有 alpha 透明度的图案图像。您不能使用键控透明度(至少不能使用此解决方案)。

为此,我已将模式设为透明(您可以在此处获取我使用的模式)并得到以下结果:

结果图片


在最终版本中,它将如下所示:

using (var pattern = Image.Load("img_pattern.png"))
using (var texture = Image.Load("img_texture.png"))
{
    var options = new GraphicsOptions { AlphaCompositionMode = PixelAlphaCompositionMode.SrcIn };
    using (var result = pattern.Clone(x => x.DrawImage(texture, options)))
    {
        result.Save("img_out.png");
    }
}

顺便说一句,这是一个很好的方法。是查看包含此功能测试的PorterDuffCompositorTests文件,因此将始终反映当前 API。

于 2018-10-18T14:50:20.673 回答