Работа с изображениями в .Net Core
Главная проблема в обработке изображений на C# под линуксом — отсутствие System.Drawing. В качестве альтернативы есть несколько сторонних библиотек, сегодня рассмотрим одну из них — ImageSharp.
Для начала работы нужно подключить два пакета: SixLabors.ImageSharp и SixLabors.ImageSharp.Drawing. Актуальная на момент написания статьи версия — 1.0.0-beta0004.
Теперь подключаем необходимые пространства имен и можно начинать работать
using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Drawing; using SixLabors.Shapes;
Создаем изображение нужного нам размера
var image = new Image<Rgba32> (500, 500);
Все изменения изображения происходят с помощью метода Mutate
image.Mutate (ctx => ctx.Fill(Rgba32.White));
ctx здесь — объект, реализующий интерфейс IImageProcessingContext, который позволяет обрабатывать изображение и имеет fluent интерфейс.
Рисование на изображении происходит с помощью метода Draw, которые принимает объект IPath.
Например заливка изображения белым и рисование 2линий будет выглядеть так
PathBuilder pathBuilder = new PathBuilder (); pathBuilder.AddLine (1, 2, 300, 400); pathBuilder.AddLine (100, 200, 3, 4); image.Mutate (ctx => ctx .Fill(Rgba32.White) .Draw (Rgba32.Gray, 3, pathBuilder.Build()));
Для того, чтобы нарисовать точку, можно использовать эллипс
Draw(Rgba32.Black, 1, new EllipsePolygon(50, 50, 1))
класс эллипса EllipsePolygon так же реализует IPath.
В конце не забываем сохранить изображение
image.Save("output.png");