Trabalhando com imagens em C# (.NET): redimensionamento e corte (resize, crop)
No desenvolvimento web moderno e na criação de aplicativos desktop, surge frequentemente a necessidade de processar imagens programaticamente: redimensioná-las (resize) para pré-visualizações, cortar (crop) bordas extras ou adaptá-las a um formato específico. A plataforma .NET oferece várias abordagens para resolver essas tarefas. Neste artigo, vamos detalhar o trabalho com a biblioteca SixLabors.ImageSharp — uma ferramenta poderosa e multiplataforma para processamento de imagens em C#.
Por que ImageSharp?
Anteriormente, a solução padrão era a biblioteca System.Drawing, mas ela tem limitações: funciona apenas no Windows, requer componentes GDI+ instalados e não é otimizada para aplicações web modernas. A ImageSharp não tem essas desvantagens:
- Totalmente escrita em código gerenciado C#.
- Funciona no Windows, Linux, macOS.
- Suporta formatos populares: JPEG, PNG, BMP, GIF, WebP.
- Alta performance e segurança.
Instalação da biblioteca
Para começar, crie um novo projeto C# (.NET 6+) e instale o pacote via NuGet:
dotnet add package SixLabors.ImageSharpOu através do gerenciador de pacotes do Visual Studio: Install-Package SixLabors.ImageSharp.
Redimensionamento de imagem (Resize)
A função resize permite reduzir ou ampliar uma imagem, mantendo as proporções ou definindo tamanhos exatos. Vejamos um exemplo onde carregamos uma imagem e a reduzimos para uma largura de 300 pixels, ajustando automaticamente a altura:
using SixLabors.ImageSharp;using SixLabors.ImageSharp.Processing;
// Carregar a imagem originalusing (Image image = Image.Load("input.jpg")){ // Redimensionar: largura 300, altura calculada automaticamente image.Mutate(x => x.Resize(300, 0));
// Salvar o resultado image.Save("output_resize.jpg");}Com o segundo parâmetro 0, indicamos que a altura deve ser calculada automaticamente para manter as proporções. Se precisar definir tamanhos exatos (por exemplo, 300x200), especifique ambos os valores:
image.Mutate(x => x.Resize(300, 200)); // Possível distorção das proporçõesPara manter as proporções com um tamanho exato, use o modo ResizeMode.Pad ou ResizeMode.Crop:
image.Mutate(x => x.Resize(new ResizeOptions{ Size = new Size(300, 200), Mode = ResizeMode.Crop // Corta as bordas para caber no tamanho}));Corte de imagem (Crop)
O corte (crop) permite recortar uma área retangular da imagem original. Isso é útil para criar avatares, miniaturas ou remover espaços vazios. Exemplo — recortamos a área central de 200x150 pixels:
using (Image image = Image.Load("input.jpg")){ // Definir coordenadas e tamanho da área de corte Rectangle cropRect = new Rectangle( x: (image.Width - 200) / 2, // Centralizar horizontalmente y: (image.Height - 150) / 2, // Centralizar verticalmente width: 200, height: 150 );
// Executar o corte image.Mutate(x => x.Crop(cropRect));
// Salvar o resultado image.Save("output_crop.jpg");}Se precisar cortar a imagem manualmente (por exemplo, canto superior esquerdo 100x100):
image.Mutate(x => x.Crop(new Rectangle(0, 0, 100, 100)));Combinação de operações: resize + crop
Frequentemente é necessário primeiro redimensionar e depois cortar para o formato desejado. A ImageSharp permite combinar operações em cadeia:
using (Image image = Image.Load("input.jpg")){ // Passo 1: reduzir para largura de 400 pixels (proporcionalmente) image.Mutate(x => Também na biblioteca
Agendador de Tarefas Swift para iOS/macOS: EventKit e DispatchSource
Trabalho com CSV em PHP: biblioteca SplFileObject e funções integradas
Kotlin Multiplatform para Kotlin: guia completo com exemplos
GraphQL em PHP: Guia Completo da Biblioteca webonyx/graphql-php
Autorização e Autenticação em Node.js: JWT, Passport.js, bcrypt