Работа с изображениями в .Net Core

07.06.2018 at 10:58

Главная проблема в обработке изображений на 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");