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.ImageSharpO 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 proporcionesPara 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 => También en la biblioteca
Autorización y autenticación en C# (.NET): guía completa
Migraciones de bases de datos en Swift: herramientas y enfoques para iOS/macOS
Generación de PDF en Swift (iOS/macOS): resumen de herramientas y ejemplos
Compression en JavaScript (Node.js): guía completa con ejemplos