Trabajo con imágenes en C# (.NET): resumen de bibliotecas y ejemplos prácticos
El procesamiento de imágenes es una de las tareas comunes en aplicaciones modernas con C# (.NET). Ya sea cargar el avatar de un usuario, crear miniaturas, superponer marcas de agua o convertir formatos, .NET ofrece varias soluciones potentes. En este artículo analizaremos las principales bibliotecas, sus capacidades y escribiremos ejemplos de código reales.
1. Biblioteca estándar: System.Drawing.Common
Históricamente, la primera y más conocida es System.Drawing.Common. Proporciona acceso a GDI+ (Graphics Device Interface) de Windows. Sin embargo, tiene limitaciones importantes:
- Solo funciona en Windows (para .NET Core/.NET 5+ se requiere el paquete
System.Drawing.Common, pero en Linux/macOS el soporte es limitado). - No está optimizada para servicios web de alta carga (fugas de memoria si se usa incorrectamente).
- No admite formatos modernos (WebP, AVIF) "de fábrica".
Ejemplo de carga y cambio de tamaño de imagen:
using System.Drawing;using System.Drawing.Imaging;
public static void ResizeImage(string sourcePath, string destPath, int newWidth, int newHeight){ using (var image = Image.FromFile(sourcePath)) using (var resized = new Bitmap(newWidth, newHeight)) using (var graphics = Graphics.FromImage(resized)) { graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; graphics.DrawImage(image, 0, 0, newWidth, newHeight); resized.Save(destPath, ImageFormat.Jpeg); }}Este código carga la imagen original, crea un nuevo Bitmap con las dimensiones especificadas y dibuja la imagen original con alta calidad. Es adecuado para tareas simples.
2. Biblioteca moderna multiplataforma: ImageSharp (SixLabors)
ImageSharp es una biblioteca completamente administrada para .NET, independiente de GDI+. Funciona en Windows, Linux y macOS. Principales ventajas:
- Código C# puro, sin dependencias nativas.
- Soporte para WebP, PNG, JPEG, BMP, GIF, TIFF.
- Filtros integrados, rotaciones, recorte, cambio de tamaño.
- Alto rendimiento y seguridad para aplicaciones web.
Instalación: dotnet add package SixLabors.ImageSharp
Ejemplo de cambio de tamaño y guardado en WebP:
using SixLabors.ImageSharp;using SixLabors.ImageSharp.Processing;using SixLabors.ImageSharp.Formats.Webp;
public static void ResizeToWebp(string input, string output, int width, int height){ using (var image = Image.Load(input)) { image.Mutate(x => x.Resize(width, height)); var encoder = new WebpEncoder { Quality = 80 }; image.Save(output, encoder); }}Tenga en cuenta: el método Mutate aplica cambios a la imagen misma (sin crear una copia), lo que ahorra memoria.
3. Motor gráfico: SkiaSharp
SkiaSharp es un envoltorio sobre la biblioteca Skia (utilizada en Chrome, Android, Flutter). Proporciona la máxima flexibilidad y rendimiento, especialmente para gráficos 2D complejos.
- Multiplataforma (Windows, Linux, macOS, plataformas móviles).
- Soporte para aceleración por hardware (GPU).
- Amplio conjunto de herramientas: trazados, pinceles, sombreadores, máscaras.
Ejemplo de superposición de marca de agua:
using SkiaSharp;
public static void AddWatermark(string imagePath, string watermarkText, string outputPath){ using (var input = SKBitmap.Decode(imagePath)) using (var canvas = new SKCanvas(input)) using (var paint = new SKPaint { Color = SKColors.White.WithAlpha(128), TextSize = También en la biblioteca
Cliente Redis para PHP: Predis — instalación, conexión, ejemplos
Contenedores de Inyección de Dependencias para Java: guía completa
Tokens JWT en JavaScript (Node.js): Guía completa
Trabajo con fechas en Rust: revisión de bibliotecas para tiempo y calendario
nock para TypeScript: guía completa con ejemplos prácticos