Trabalho com imagens em C# (.NET): visão geral das bibliotecas e exemplos práticos
O processamento de imagens é uma das tarefas comuns em aplicações modernas em C# (.NET). Seja para carregar o avatar de um usuário, criar miniaturas, aplicar marcas d'água ou converter formatos — o .NET oferece várias soluções poderosas. Neste artigo, vamos explorar as principais bibliotecas, suas capacidades e escrever exemplos reais de código.
1. Biblioteca padrão: System.Drawing.Common
Historicamente, a primeira e mais conhecida é a System.Drawing.Common. Ela fornece acesso ao GDI+ (Graphics Device Interface) do Windows. No entanto, possui limitações importantes:
- Funciona apenas no Windows (para .NET Core/.NET 5+ é necessário o pacote
System.Drawing.Common, mas no Linux/macOS o suporte é limitado). - Não é otimizada para serviços web de alta carga (vazamentos de memória se usada incorretamente).
- Não suporta formatos modernos (WebP, AVIF) "de fábrica".
Exemplo de carregamento e redimensionamento de imagem:
using System.Drawing;using System.Drawing.Imaging;
public static void ResizeImage(string sourcePath, string destPath, int newWidth, int newHeight){ using (var image = Image.FromFile(sourcePath)) using (var resized = new Bitmap(newWidth, newHeight)) using (var graphics = Graphics.FromImage(resized)) { graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; graphics.DrawImage(image, 0, 0, newWidth, newHeight); resized.Save(destPath, ImageFormat.Jpeg); }}Este código carrega a imagem original, cria um novo Bitmap com as dimensões especificadas e desenha a imagem original com alta qualidade. Adequado para tarefas simples.
2. Biblioteca moderna e multiplataforma: ImageSharp (SixLabors)
ImageSharp é uma biblioteca totalmente gerenciada para .NET, independente do GDI+. Funciona no Windows, Linux e macOS. Principais vantagens:
- Código C# puro, sem dependências nativas.
- Suporte a WebP, PNG, JPEG, BMP, GIF, TIFF.
- Filtros integrados, rotações, corte, redimensionamento.
- Alta performance e segurança para aplicações web.
Instalação: dotnet add package SixLabors.ImageSharp
Exemplo de redimensionamento e salvamento em WebP:
using SixLabors.ImageSharp;using SixLabors.ImageSharp.Processing;using SixLabors.ImageSharp.Formats.Webp;
public static void ResizeToWebp(string input, string output, int width, int height){ using (var image = Image.Load(input)) { image.Mutate(x => x.Resize(width, height)); var encoder = new WebpEncoder { Quality = 80 }; image.Save(output, encoder); }}Observe: o método Mutate aplica as alterações diretamente na imagem (sem criar uma cópia), economizando memória.
3. Motor gráfico: SkiaSharp
SkiaSharp é um wrapper para a biblioteca Skia (usada no Chrome, Android, Flutter). Ela oferece máxima flexibilidade e desempenho, especialmente para gráficos 2D complexos.
- Multiplataforma (Windows, Linux, macOS, plataformas móveis).
- Suporte a aceleração por hardware (GPU).
- Conjunto rico de ferramentas: caminhos, pincéis, shaders, máscaras.
Exemplo de aplicação de marca d'água:
using SkiaSharp;
public static void AddWatermark(string imagePath, string watermarkText, string outputPath){ using (var input = SKBitmap.Decode(imagePath)) using (var canvas = new SKCanvas(input)) using (var paint = new SKPaint { Color = SKColors.White.WithAlpha(128), TextSize = Também na biblioteca
Eigen para C++: guia completo com exemplos práticos
Validação de dados em Kotlin: bibliotecas, abordagens e exemplos de código
Rate Limiting em PHP: Limitação de Frequência de Requisições para Proteção do Site