Обработка изображений в C# (.NET): библиотеки и примеры кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с изображениями в C# (.NET): обзор библиотек и практические примеры

Обработка изображений — одна из ключевых задач при создании современных веб-приложений, десктопных программ и мобильных сервисов. В экосистеме C# (.NET) существует несколько мощных библиотек, позволяющих загружать, редактировать, анализировать и сохранять изображения. В этой статье мы разберём основные подходы: от классической System.Drawing до современных кроссплатформенных решений ImageSharp и SkiaSharp.

1. System.Drawing.Common — классика .NET

Библиотека System.Drawing.Common доступна в .NET Core/.NET 5+ как NuGet-пакет. Она предоставляет знакомый API для работы с растровыми изображениями (BMP, JPEG, PNG, GIF, TIFF).
Важно: на Linux и macOS требует установки библиотеки libgdiplus.

Установка

dotnet add package System.Drawing.Common

Пример: загрузка, изменение размера и сохранение

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

public class ImageProcessor
{
    public void ResizeImage(string inputPath, string outputPath, int maxWidth, int maxHeight)
    {
        using var original = Image.FromFile(inputPath);
        var ratio = Math.Min((double)maxWidth / original.Width, (double)maxHeight / original.Height);
        int newWidth = (int)(original.Width * ratio);
        int newHeight = (int)(original.Height * ratio);

        using var bitmap = new Bitmap(newWidth, newHeight);
        using var graphics = Graphics.FromImage(bitmap);
        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
        graphics.DrawImage(original, 0, 0, newWidth, newHeight);

        bitmap.Save(outputPath, ImageFormat.Jpeg);
    }
}

2. ImageSharp (SixLabors) — современная кроссплатформенная библиотека

SixLabors.ImageSharp — чистая управляемая библиотека без зависимостей от нативных компонентов. Идеально подходит для серверных приложений, веб-сервисов и облачных функций. Поддерживает расширенные форматы (WebP, HEIF, AVIF) и продвинутую обработку.

Установка

dotnet add package SixLabors.ImageSharp

Пример: наложение водяного знака

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.Processing;
using SixLabors.Fonts;

public async Task AddWatermarkAsync(string inputPath, string outputPath, string watermarkText)
{
    using var image = await Image.LoadAsync(inputPath);
    var font = SystemFonts.CreateFont("Arial", 48, FontStyle.Bold);

    image.Mutate(ctx =>
    {
        ctx.DrawText(watermarkText, font, Color.White, new PointF(50, 50));
    });

    await image.SaveAsync(outputPath);
}

3. SkiaSharp — графический движок от Google

SkiaSharp — обёртка над библиотекой Skia (используется в Chrome, Flutter, Android). Обеспечивает высокую производительность, низкоуровневый доступ к пикселям и поддержку сложных векторных преобразований.

Установка

dotnet add package SkiaSharp

Пример: применение фильтра размытия (Blur)

using SkiaSharp;

public void ApplyBlur(string inputPath, string outputPath, float sigma)
{
    using var inputStream = File.OpenRead(inputPath);
    using var original = SKBitmap.Decode(inputStream);
    using var surface = new SKCanvas(original);

    var paint = new SKPaint
    {
        ImageFilter = SKImageFilter.CreateBlur(sigma, sigma)
    };
    surface.DrawBitmap(original, 0, 0, paint);

    using var image = SKImage.FromBitmap(original);
    using var data = image.Encode(SKEncodedImageFormat.Jpeg, 90);
    using var outputStream = File.OpenWrite(outputPath);
    data.SaveTo(outputStream);
}

4. Дополнительные возможности и сравнение

  • System.Drawing — подходит для быстрой миграции старых проектов, но ограничен в кроссплатформенности.
  • ImageSharp — рекомендуется для новых проектов: безопасная работа с памятью, поддержка async/await, встроенная обработка метаданных.
  • SkiaSharp — выбор для высоконагруженных систем, где нужен полный контроль над рендерингом (например, генерация сложных графиков или PDF).

5. Практический пример: конвертация форматов с оптимизацией

Ниже представлен универсальный метод, который использует ImageSharp для конвертации изображения в WebP с настройкой качества:

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats                    

Рекомендаций