Trabajo con imágenes en C# (.NET): bibliotecas, herramientas y ejemplos

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): 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 =

Recommendations