我正在使用以下代码段从图片中删除背景。
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);
需要MagickImage image
和MagickImage combineMask
并输出合并后的image
。
以前,我从不需要除纯白色背景之外的任何东西(这是提供的)。现在,我希望能够设置背景的颜色。我首先将非(255,255,255)
组颜色传递给设置为image.Settings.BackgroundColor
。这没有任何成就。我一直在尝试调查MagickImage库(通过他们的github,他们真的没有完整的文档),但它仍然是不可理解的。
我如何让image.Alpha(ImageMagick.AlphaOption.Remove);
用背景颜色(或传递的颜色)替换删除的部分,或以其他方式更改背景的颜色?
答案 0 :(得分: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中包含的颜色。
现在,由于以前的白色区域现在是透明的,我无法模糊图像,以便在蒙版和图片之间创建平滑过渡,我仍然需要修复。