Procesamiento de imágenes en C#: cambio de tamaño y recorte (resize, crop)

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con imágenes en C#: cambio de tamaño y recorte (resize, crop)

\n\n

En el desarrollo web moderno y las aplicaciones de escritorio, a menudo es necesario procesar imágenes mediante programación: reducirlas para acelerar la carga, crear miniaturas o recortar bordes sobrantes. En el ecosistema .NET existen varios enfoques para resolver estas tareas. En este artículo, veremos dos formas principales de cambiar el tamaño (resize) y recortar (crop) imágenes en C#: el clásico System.Drawing y el moderno multiplataforma SixLabors.ImageSharp.

\n\n

1. Uso de System.Drawing (Windows Forms / .NET Framework)

\n

La forma clásica, disponible en .NET Framework y .NET Core/5+ (con limitaciones en Linux/macOS). Funciona a través del espacio de nombres System.Drawing y la clase Bitmap. Adecuado para proyectos antiguos o aplicaciones solo para Windows.

\n\n

Ejemplo: cambio de tamaño manteniendo la proporción

\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

Ejemplo: recorte (crop) de imagen

\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, Width, Height\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 es una biblioteca moderna, completamente gestionada para el procesamiento de imágenes, que funciona en .NET Core, .NET 5/6/7+ y .NET Framework. No depende de la API de Windows, por lo que es ideal para aplicaciones web (ASP.NET Core), utilidades de consola y contenedores Docker.

\n\n

Instalación a través de NuGet:

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

Ejemplo: cambio de tamaño manteniendo la proporción

\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 la imagen, añadiendo bordes transparentes/blancos\n        // ResizeMode.Crop — recorta al tamaño especificado\n        // ResizeMode.Max — mantiene la proporción, ajustando al rectángulo\n        image.Mutate(x => x.Resize(width, height, KnownResamplers.Lanczos3));\n        image.Save(outputPath);\n    }\n}\n\n// Ejemplo con preservación de proporciones (au                    

Recommendations