0

我正在使用以下代码片段从图像中删除背景。

int[] bgColors = {203,255,240}
ImageMagick.MagickImage image = new ImageMagick.MagickImage("input.jpg")
ImageMagick.MagickImage combineMask= new ImageMagick.MagickImage("mask.jpg")

combineMask.Blur(7, 30);

image.Composite(combineMask, ImageMagick.CompositeOperator.CopyAlpha);
image.Settings.BackgroundColor = new ImageMagick.MagickColor(bgColors[0], bgColors[1], bgColors[2]);
image.Alpha(ImageMagick.AlphaOption.Remove);

它采用 MagickImageimage和 MagickImagecombineMask并输出image如下链接的组合。

原版+蒙版=最终版

以前,除了纯白色背景(它提供)之外,我从不需要任何东西。现在,我希望能够设置背景的颜色。我首先将一组非(255,255,255)颜色设置传递给image.Settings.BackgroundColor. 这并没有完成任何事情。我一直在尝试调查 MagickImage 库(通过他们的 github,他们并没有非常完整的文档),但它仍然难以理解。

我怎样才能image.Alpha(ImageMagick.AlphaOption.Remove);用背景颜色(或传递的颜色)替换已删除的部分,或者以其他方式更改背景颜色?

4

1 回答 1

0

解决方案

我已经找到了一个解决方案,可以让我完成 90% 的路程。

int[] bgColors = {203,255,240}
ImageMagick.MagickImage image = new ImageMagick.MagickImage("input.jpg")
ImageMagick.MagickImage combineMask= new ImageMagick.MagickImage("mask.jpg")

combineMask.ColorFuzz = new ImageMagick.Percentage(5);

combineMask.Transparent(ImageMagick.MagickColor.FromRgb(255, 255, 255));
combineMask.Opaque(ImageMagick.MagickColor.FromRgb((byte)0, (byte)0, (byte)0), 
ImageMagick.MagickColor.FromRgb((byte)bgColors[0], (byte)bgColors[1], (byte)bgColors[2]));

image.Composite(combineMask, ImageMagick.CompositeOperator.Over);

我没有使用黑/白蒙版和抓取 Alpha 通道,而是将蒙版的白色部分转换为透明,然后将蒙版的黑色部分转换为 bgColors 中包含的颜色。

现在,因为以前的白色区域现在是透明的,所以我无法模糊图像以在蒙版和图片之间创建平滑过渡,我仍然需要修复它。

于 2018-01-10T18:22:22.677 回答