Biblioteca Sharp para trabajar con imágenes en Node.js
En el desarrollo web moderno, el procesamiento de imágenes en el lado del servidor es una tarea críticamente importante. Node.js, gracias a su arquitectura orientada a eventos, maneja esta tarea de manera excelente. Entre las múltiples bibliotecas para trabajar con imágenes, un lugar especial lo ocupa Sharp, un módulo de alto rendimiento de código abierto, escrito en C++ y que utiliza la biblioteca libvips.
¿Qué es Sharp?
Sharp es un módulo de Node.js para el procesamiento rápido de imágenes. Soporta los formatos JPEG, PNG, WebP, AVIF, TIFF y GIF. Las capacidades principales incluyen redimensionamiento, recorte, rotación, corrección de color, superposición de marcas de agua y conversión entre formatos. Gracias al uso de libvips, Sharp funciona de 4 a 5 veces más rápido que bibliotecas similares (por ejemplo, ImageMagick o GraphicsMagick).
Instalación
La instalación se realiza a través de npm. Asegúrese de que en el sistema estén instalados los compiladores de C++ (gcc o clang) y libvips (en algunos sistemas operativos se requiere instalación previa).
npm install sharpDespués de la instalación, puede importar el módulo a su proyecto:
const sharp = require('sharp');Operaciones básicas con imágenes
1. Redimensionamiento (resize)
La tarea más común es reducir o aumentar el tamaño de una imagen. Sharp permite establecer el ancho, la altura o ambas dimensiones simultáneamente. Si solo se especifica un parámetro, el segundo se calculará proporcionalmente.
const sharp = require('sharp');
async function resizeImage() { try { await sharp('input.jpg') .resize(300, 200) // ancho 300px, alto 200px .toFile('output-resized.jpg'); console.log('Imagen redimensionada'); } catch (error) { console.error('Error:', error); }}
resizeImage();Para mantener las proporciones, use fit:
const sharp = require('sharp');
async function resizeWithFit() { await sharp('input.jpg') .resize({ width: 300, height: 200, fit: 'inside' // 'cover', 'contain', 'fill', 'inside', 'outside' }) .toFile('output-fit.jpg');}
resizeWithFit();2. Recorte (crop)
El recorte permite eliminar partes no deseadas de la imagen. Sharp admite el recorte por coordenadas específicas o por estrategia (por ejemplo, recorte central).
const sharp = require('sharp');
async function cropImage() { await sharp('input.jpg') .extract({ left: 100, top: 50, width: 400, height: 300 }) .toFile('output-cropped.jpg');}
cropImage();También se puede usar resize con la opción crop:
const sharp = require('sharp');
async function cropWithResize() { await sharp('input.jpg') .resize(200, 200, { fit: 'cover', position: 'centre' }) .toFile('output-cover.jpg');}
cropWithResize();3. Conversión de formatos
Sharp permite convertir fácilmente imágenes de un formato a otro. Simplemente indique la extensión en el archivo de salida o use el método .toFormat().
const sharp = require('sharp');
async function convertToWebP() { await sharp('input.png') .toFormat('webp') .toFile('output.webp');}
async function convertToJpeg() { await sharp('input.webp') .jpeg({ quality: 80 }) .toFile('output.jpg');}
convertToWebP();convertToJpeg();4. Trabajo con metadatos
Puede extraer los metadatos de la imagen: dimensiones, espacio de color, DPI, datos EXIF, etc.
const sharp = require('sharp');
async function getMetadata() { const metadata = await sharp('input.jpg').metadata(); console.log('Metadatos:', metadata); // { format: También en la biblioteca
Monitoreo de aplicaciones PHP con las bibliotecas php-ast y xhprof
Trabajo con imágenes en Kotlin: bibliotecas, herramientas y ejemplos
Pruebas en Swift (iOS/macOS): frameworks y herramientas
Generador de códigos QR en Java: biblioteca ZXing (Zebra Crossing)
Trabajo con XML en C# (.NET): Guía completa para principiantes