Trabalhando com Imagens em C# (.NET): Visão Geral das Bibliotecas e Exemplos Práticos
O processamento de imagens é uma das tarefas essenciais na criação de aplicações web modernas, programas desktop e serviços móveis. No ecossistema C# (.NET), existem várias bibliotecas poderosas que permitem carregar, editar, analisar e salvar imagens. Neste artigo, abordaremos as principais abordagens: desde a clássica System.Drawing até as soluções multiplataforma modernas ImageSharp e SkiaSharp.
1. System.Drawing.Common — O Clássico do .NET
A biblioteca System.Drawing.Common está disponível no .NET Core/.NET 5+ como um pacote NuGet. Ela fornece uma API familiar para trabalhar com imagens raster (BMP, JPEG, PNG, GIF, TIFF).
Importante: no Linux e macOS, requer a instalação da biblioteca libgdiplus.
Instalação
dotnet add package System.Drawing.CommonExemplo: Carregamento, Redimensionamento e Salvamento
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) — Biblioteca Multiplataforma Moderna
SixLabors.ImageSharp é uma biblioteca gerenciada pura, sem dependências de componentes nativos. Ideal para aplicações de servidor, serviços web e funções em nuvem. Suporta formatos avançados (WebP, HEIF, AVIF) e processamento avançado.
Instalação
dotnet add package SixLabors.ImageSharpExemplo: Adicionando Marca d'Água
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 — Motor Gráfico do Google
SkiaSharp é um wrapper para a biblioteca Skia (usada no Chrome, Flutter, Android). Oferece alto desempenho, acesso de baixo nível aos pixels e suporte a transformações vetoriais complexas.
Instalação
dotnet add package SkiaSharpExemplo: Aplicando Filtro de Desfoque (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);\