我需要对2张图像执行Source In composition。
我正在尝试使用ImageSharp来做到这一点:
img.Mutate(imgMaskIn =>
{
using (var mask = Image.Load(maskImageFileName))
{
imgMaskIn.DrawImage(mask, new GraphicsOptions { AlphaCompositionMode = PixelAlphaCompositionMode.SrcIn});
}
});
但结果是蒙版图像。它应该基于this merge request运行。
我是错误地使用了库,还是有错误?
在ASP.NET Core中还有其他方法吗?
答案 0 :(得分:2)
不幸的是,使用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透明度的图案图像。您不能使用键控透明度(至少不使用此解决方案)。
为此,我已经将图案透明化了(您可以get the one I used here)并得到以下结果:
在最终版本中,它将如下所示:
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
file,其中包含对此功能的测试,因此将始终反映当前的API。