Trabalhando com imagens em C# (.NET): guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com imagens em C# (.NET): do básico às técnicas avançadas



O processamento de imagens é uma das tarefas essenciais no desenvolvimento moderno. No ecossistema C# (.NET), existem várias bibliotecas poderosas para trabalhar com gráficos, desde a embutida System.Drawing até soluções modernas e multiplataforma, como ImageSharp e SkiaSharp. Neste artigo, abordaremos detalhadamente as principais abordagens, forneceremos exemplos de código e daremos recomendações práticas.



1. Visão geral das bibliotecas para trabalhar com imagens no .NET



A escolha da biblioteca depende das suas tarefas e plataforma. Aqui estão três opções principais:



  • System.Drawing.Common — biblioteca clássica da Microsoft, disponível no .NET 6+. Funciona via GDI+ no Windows, mas tem limitações no Linux/macOS.
  • SixLabors.ImageSharp — biblioteca totalmente gerenciada e multiplataforma. Suporta os formatos JPEG, PNG, BMP, GIF, WebP. Ideal para aplicações web e processamento no servidor.
  • SkiaSharp — wrapper sobre o motor Skia (usado no Chrome, Flutter). Oferece alto desempenho e amplas capacidades para gráficos 2D, incluindo trabalho com imagens, texto e gráficos vetoriais.


Para a maioria dos projetos modernos, recomenda-se o ImageSharp — é fácil de usar, ativamente desenvolvido e independente de plataforma.



2. Instalação e configuração das bibliotecas



Instalação via NuGet Package Manager (ou .NET CLI):



// Para ImageSharpdotnet add package SixLabors.ImageSharp

// Para SkiaSharpdotnet add package SkiaSharp

// Para System.Drawing (se necessário)dotnet add package System.Drawing.Common


3. Operações básicas com imagens usando ImageSharp



Vamos considerar as operações principais: carregamento, redimensionamento, corte, aplicação de filtros e salvamento.



3.1 Carregamento e exibição de informações



using SixLabors.ImageSharp;using SixLabors.ImageSharp.PixelFormats;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ Console.WriteLine($"Largura: {image.Width}, Altura: {image.Height}"); Console.WriteLine($"Formato de pixel: {image.PixelType}");}


3.2 Redimensionamento mantendo a proporção



using SixLabors.ImageSharp.Processing;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ int newWidth = 800; int newHeight = (int)((float)image.Height / image.Width * newWidth);

image.Mutate(x => x.Resize(newWidth, newHeight)); image.Save("output_resized.jpg");}


3.3 Corte (crop) da parte central



using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){    int cropSize = Math.Min(image.Width, image.Height);    var rect = new Rectangle(        (image.Width - cropSize) / 2,        (image.Height - cropSize) / 2,        cropSize,        cropSize    );

image.Mutate(x => x.Crop(rect)); image.Save("output_cropped.jpg");}


3.4 Aplicação de filtros (preto e branco, desfoque)



using SixLabors.ImageSharp.Processing;using SixLabors.ImageSharp.Processing.Processors.Transforms;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ // Filtro preto e branco image.Mutate(x => x.Grayscale());

// Desfoque Gaussiano (raio 5) image.Mutate(x => x.GaussianBlur(5));

image.Save("output_filtered.jpg");}


4. Trabalhando com formatos e qualidade



O ImageSharp permite definir parâmetros de salvamento para cada formato:



using SixLabors.ImageSharp.Formats.Jpeg;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ var encoder = new J

Recommendations