Processamento de imagens em C#: redimensionamento e corte (resize, crop)

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#: redimensionamento e corte (resize, crop)

\n\n

No desenvolvimento web moderno e em aplicações desktop, é frequentemente necessário processar imagens programaticamente: reduzi-las para acelerar o carregamento, criar miniaturas ou cortar bordas desnecessárias. No ecossistema .NET, existem várias abordagens para resolver essas tarefas. Neste artigo, veremos duas formas principais de redimensionar (resize) e cortar (crop) imagens em C#: a clássica System.Drawing e a moderna e multiplataforma SixLabors.ImageSharp.

\n\n

1. Usando System.Drawing (Windows Forms / .NET Framework)

\n

A forma clássica, disponível no .NET Framework e .NET Core/5+ (com limitações no Linux/macOS). Funciona através do namespace System.Drawing e da classe Bitmap. Adequado para projetos antigos ou aplicações apenas para Windows.

\n\n

Exemplo: redimensionamento mantendo a proporção

\n
using System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Drawing.Imaging;\n\npublic static Bitmap ResizeImage(Image image, int newWidth, int newHeight)\n{\n    var destRect = new Rectangle(0, 0, newWidth, newHeight);\n    var destImage = new Bitmap(newWidth, newHeight);\n\n    using (var graphics = Graphics.FromImage(destImage))\n    {\n        graphics.CompositingMode = CompositingMode.SourceCopy;\n        graphics.CompositingQuality = CompositingQuality.HighQuality;\n        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;\n        graphics.SmoothingMode = SmoothingMode.HighQuality;\n        graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;\n\n        using (var wrapMode = new ImageAttributes())\n        {\n            wrapMode.SetWrapMode(WrapMode.TileFlipXY);\n            graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);\n        }\n    }\n    return destImage;\n}\n\n// Uso:\nusing (var original = Image.FromFile("input.jpg"))\n{\n    using (var resized = ResizeImage(original, 800, 600))\n    {\n        resized.Save("output.jpg", ImageFormat.Jpeg);\n    }\n}
\n\n

Exemplo: corte (crop) de imagem

\n
public static Bitmap CropImage(Image source, Rectangle cropArea)\n{\n    var bmp = new Bitmap(cropArea.Width, cropArea.Height);\n    using (var g = Graphics.FromImage(bmp))\n    {\n        g.DrawImage(source, new Rectangle(0, 0, bmp.Width, bmp.Height),\n                    cropArea, GraphicsUnit.Pixel);\n    }\n    return bmp;\n}\n\n// Uso:\nvar cropRect = new Rectangle(100, 50, 300, 200); // X, Y, Largura, Altura\nusing (var cropped = CropImage(Image.FromFile("input.jpg"), cropRect))\n{\n    cropped.Save("cropped.jpg", ImageFormat.Jpeg);\n}
\n\n

2. SixLabors.ImageSharp (multiplataforma .NET)

\n

SixLabors.ImageSharp é uma biblioteca moderna e totalmente gerenciada para processamento de imagens, que funciona no .NET Core, .NET 5/6/7+ e .NET Framework. Ela não depende da API do Windows, sendo ideal para aplicações web (ASP.NET Core), utilitários de console e contêineres Docker.

\n\n

Instalação via NuGet:

\n
dotnet add package SixLabors.ImageSharp
\n\n

Exemplo: redimensionamento mantendo a proporção

\n
using SixLabors.ImageSharp;\nusing SixLabors.ImageSharp.Processing;\n\npublic static void ResizeImageSharp(string inputPath, string outputPath, int width, int height)\n{\n    using (var image = Image.Load(inputPath))\n    {\n        // Modo ResizeMode.Pad — ajusta a imagem, adicionando bordas transparentes/brancas\n        // ResizeMode.Crop — corta para as dimensões especificadas\n        // ResizeMode.Max — mantém a proporção, ajustando ao retângulo\n        image.Mutate(x => x.Resize(width, height, KnownResamplers.Lanczos3));\n        image.Save(outputPath);\n    }\n}\n\n// Exemplo com preservação de proporção (aut                    

Recommendations