Procesamiento de imágenes en C#: redimensionar y recortar con la librería ImageSharp

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# (.NET): cambio de tamaño y recorte (resize, crop)



En el desarrollo web moderno y la creación de aplicaciones de escritorio, a menudo surge la necesidad de procesar imágenes mediante programación: cambiar su tamaño (resize) para vistas previas, recortar (crop) bordes sobrantes o adaptarlas a un formato específico. La plataforma .NET ofrece varios enfoques para resolver estas tareas. En este artículo, analizaremos en detalle el trabajo con la librería SixLabors.ImageSharp, una potente herramienta multiplataforma para el procesamiento de imágenes en C#.



¿Por qué ImageSharp?



Anteriormente, la solución estándar era la librería System.Drawing, pero tiene limitaciones: solo funciona en Windows, requiere componentes GDI+ instalados y no está optimizada para aplicaciones web modernas. ImageSharp carece de estas desventajas:

  • Está completamente escrita en código administrado C#.
  • Funciona en Windows, Linux y macOS.
  • Soporta formatos populares: JPEG, PNG, BMP, GIF, WebP.
  • Alto rendimiento y seguridad.


Instalación de la librería



Para comenzar, cree un nuevo proyecto C# (.NET 6+) e instale el paquete a través de NuGet:

dotnet add package SixLabors.ImageSharp

O a través del administrador de paquetes de Visual Studio: Install-Package SixLabors.ImageSharp.



Cambio de tamaño de imagen (Resize)



La función resize permite reducir o ampliar una imagen, manteniendo las proporciones o estableciendo dimensiones exactas. Veamos un ejemplo donde cargamos una imagen y la reducimos a un ancho de 300 píxeles, ajustando automáticamente la altura:



using SixLabors.ImageSharp;using SixLabors.ImageSharp.Processing;

// Carga de la imagen originalusing (Image image = Image.Load("input.jpg")){ // Cambio de tamaño: ancho 300, la altura se calcula automáticamente image.Mutate(x => x.Resize(300, 0));

// Guardar el resultado image.Save("output_resize.jpg");}


Con el segundo parámetro 0 indicamos que la altura debe calcularse automáticamente para mantener las proporciones. Si necesita dimensiones exactas (por ejemplo, 300x200), especifique ambos valores:



image.Mutate(x => x.Resize(300, 200)); // Posible distorsión de proporciones


Para mantener las proporciones con un tamaño exacto, use el modo ResizeMode.Pad o ResizeMode.Crop:



image.Mutate(x => x.Resize(new ResizeOptions{    Size = new Size(300, 200),    Mode = ResizeMode.Crop // Recorta los bordes para ajustarse al tamaño}));


Recorte de imagen (Crop)



El recorte (crop) permite extraer un área rectangular de la imagen original. Esto es útil para crear avatares, miniaturas o eliminar espacios vacíos. Ejemplo: recortamos el área central de 200x150 píxeles:



using (Image image = Image.Load("input.jpg")){    // Definir coordenadas y tamaño del área a recortar    Rectangle cropRect = new Rectangle(        x: (image.Width - 200) / 2,   // Centrar horizontalmente        y: (image.Height - 150) / 2,  // Centrar verticalmente        width: 200,        height: 150    );

// Realizar el recorte image.Mutate(x => x.Crop(cropRect));

// Guardar el resultado image.Save("output_crop.jpg");}


Si necesita recortar la imagen manualmente (por ejemplo, la esquina superior izquierda de 100x100):



image.Mutate(x => x.Crop(new Rectangle(0, 0, 100, 100)));


Combinación de operaciones: resize + crop



A menudo se requiere primero cambiar el tamaño y luego recortar al formato deseado. ImageSharp permite combinar operaciones en cadena:



using (Image image = Image.Load("input.jpg")){    // Paso 1: reducir a un ancho de 400 píxeles (proporcionalmente)    image.Mutate(x =>                    

Recommendations