Trabalhando com imagens em C#: redimensionamento e corte (resize, crop)
\n\nNo 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.
1. Usando System.Drawing (Windows Forms / .NET Framework)
\nA 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.
Exemplo: redimensionamento mantendo a proporção
\nusing 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\nExemplo: corte (crop) de imagem
\npublic 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\n2. SixLabors.ImageSharp (multiplataforma .NET)
\nSixLabors.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\nInstalação via NuGet:
\ndotnet add package SixLabors.ImageSharp\n\nExemplo: redimensionamento mantendo a proporção
\nusing 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 Também na biblioteca
Envio de SMS em PHP: Bibliotecas de API para Integração
GraphQL Java: ferramenta poderosa para criar APIs modernas em Java
ORM para Kotlin: comparação entre Exposed, Room e Ktorm com exemplos
Análise de HTML em Java: melhores bibliotecas e exemplos de código