Sharp para JavaScript (Node.js): guía completa con 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

Introducción: ¿Qué es Sharp y para qué sirve?

\n\n

Sharp es una biblioteca de alto rendimiento para el procesamiento de imágenes, escrita en C++ y que proporciona una API conveniente para Node.js. Permite convertir imágenes en formatos JPEG, PNG, WebP, AVIF, TIFF y GIF a otros formatos, cambiar su tamaño, recortar, rotar, agregar efectos y mucho más.

\n\n

La principal ventaja de Sharp es la velocidad. La biblioteca utiliza las bibliotecas nativas libvips, lo que la hace varias veces más rápida que alternativas (como Jimp o gm). Es ideal para:

\n
    \n
  • Servidores web y API — procesamiento dinámico de avatares, vistas previas, optimización de imágenes antes de la carga.
  • \n
  • Procesamiento por lotes — conversión de miles de imágenes al formato y tamaño deseados.
  • \n
  • Creación de miniaturas y galerías — generación rápida de thumbnails.
  • \n
  • Optimización del peso de las imágenes — compresión sin pérdida de calidad (o con pérdida controlada).
  • \n
\n\n

Sharp funciona con buffers, flujos (streams) y archivos, lo que la hace flexible para la integración en cualquier aplicación Node.js.

\n\n

Instalación

\n\n

La instalación de Sharp se realiza a través de npm. La biblioteca requiere Node.js versión 12.13.0 o superior (se recomienda 14+).

\n\n
npm install sharp
\n\n

Si usas yarn:

\n\n
yarn add sharp
\n\n

Importante: Sharp compila módulos nativos durante la instalación. Si tienes errores, asegúrate de tener instalados build-essential (en Linux) o Xcode Command Line Tools (en macOS). Para Windows, normalmente son suficientes las Visual Studio Build Tools.

\n\n

Después de la instalación, importa la biblioteca en tu proyecto:

\n\n
const sharp = require('sharp');
\n\n

Inicio rápido

\n\n

Escribamos un script simple que cargue una imagen, la reduzca a un ancho de 300 píxeles (manteniendo la proporción) y la guarde en formato WebP.

\n\n
const sharp = require('sharp');\nconst path = require('path');\n\nasync function quickStart() {\n    try {\n        await sharp('input.jpg')\n            .resize(300) // Ancho 300px, la altura se ajustará automáticamente\n            .webp({ quality: 80 }) // Convertir a WebP con calidad 80%\n            .toFile('output.webp');\n        \n        console.log('¡Imagen procesada exitosamente!');\n    } catch (error) {\n        console.error('Error:', error);\n    }\n}\n\nquickStart();
\n\n

Este ejemplo demuestra el encadenamiento de métodos (chaining), que es la base del trabajo con Sharp. Cada método devuelve una nueva instancia de Sharp, lo que permite aplicar transformaciones secuencialmente.

\n\n

Métodos y funciones principales

\n\n

A continuación se presentan 10 métodos clave de Sharp con descripción detallada, parámetros y ejemplos de código.

\n\n

1. resize() — Cambiar el tamaño de la imagen

\n

Qué hace: Cambia el ancho y/o alto de la imagen. Puede recortar o ajustar la imagen dentro de los límites especificados.

\n

Parámetros:

\n
    \n
  • width (number, opcional) — nuevo ancho en píxeles.
  • \n
  • height (number, opcional) — nuevo alto en píxeles.
  • \n
  • options (object, opcional):\n
      \n
    • fit (string) — modo de ajuste: 'cover' (rellenar, recortando el exceso), 'contain' (ajustar completamente), 'fill' (estirar), 'inside' (reducir para que quepa), 'outside' (ampliar hasta salir de los bordes). Por defecto 'cover'.
    • \n
    • position (string) — posición al recortar: 'center', 'top', 'left', 'right', 'bottom', etc.
    • \n
    • withoutEnlargement (boolean) — prohibir el aumento de la imagen.
    • \n
    \n
  • \n
\n

Ejemplo:

\n
// Reducir a 200x200, recortando desde el centro\nawait sharp                    

Recommendations