Processamento de imagens em C#: redimensionar e cortar com a biblioteca ImageSharp

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): 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.ImageSharp

Ou 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ções


Para 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 =>                    

Recommendations