Как заменить маску определенного цвета?
Я использую следующий фрагмент кода, чтобы удалить фон из изображения.
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);
заменить удаленный участок цветом фона (или переданным цветом) или изменить цвет фона другим способом?
1 ответ
Решение
Я нашел решение, которое займет у меня 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);
Вместо того, чтобы использовать черно-белую маску и захват альфа-каналов, я преобразую белую часть маски в прозрачную, а затем преобразую черную часть маски в цвета, содержащиеся в bgColors.
Теперь, поскольку ранее белая область теперь прозрачна, я не могу размыть изображение, чтобы создать плавный переход между маской и изображением, который мне все еще нужно исправить.