Constructor de Sharp
Sharp es una biblioteca de procesamiento de imágenes de alto rendimiento para Node.js. El constructor es el punto de partida para usar Sharp.
Uso Básico
javascript
import sharp from 'sharp';
// Crear instancia de Sharp desde ruta de archivo
const image = sharp('input.jpg');
// Crear instancia de Sharp desde Buffer
const image = sharp(inputBuffer);
// Crear instancia de Sharp desde Stream
const image = sharp(inputStream);Parámetros del Constructor
Fuentes de Entrada
El constructor de Sharp acepta múltiples fuentes de entrada:
javascript
// Ruta de archivo
sharp('input.jpg')
// Buffer
sharp(buffer)
// Stream
sharp(stream)
// URL
sharp('https://example.com/image.jpg')
// Múltiples fuentes de entrada
sharp(['input1.jpg', 'input2.jpg'])Objeto de Opciones
javascript
sharp(input, {
// Opciones de entrada
input: {
failOnError: false,
limitInputPixels: 268402689,
sequentialRead: false
},
// Opciones de páginas (para imágenes multipágina)
pages: -1,
// Opciones raw
raw: {
width: 1920,
height: 1080,
channels: 3
}
})Opciones de Entrada
failOnError
- Tipo:
boolean - Valor por defecto:
true - Descripción: Si lanzar excepción cuando se encuentra un error
javascript
sharp('input.jpg', { failOnError: false })
.resize(300, 200)
.toFile('output.jpg')
.catch(err => console.log('Procesamiento fallido:', err));limitInputPixels
- Tipo:
number - Valor por defecto:
268402689(16384 x 16384) - Descripción: Limitar el número de píxeles de la imagen de entrada
javascript
sharp('large-image.jpg', {
limitInputPixels: 100000000
})sequentialRead
- Tipo:
boolean - Valor por defecto:
false - Descripción: Si leer los datos de imagen secuencialmente
javascript
sharp('input.jpg', { sequentialRead: true })Imágenes Multipágina
Para imágenes multipágina (como TIFF, PDF), puedes especificar las páginas a procesar:
javascript
// Procesar todas las páginas
sharp('multi-page.tiff', { pages: -1 })
// Procesar página específica (comienza desde 0)
sharp('multi-page.tiff', { pages: 0 })
// Procesar múltiples páginas
sharp('multi-page.tiff', { pages: [0, 2, 4] })Datos de Imagen Raw
Al procesar datos de imagen raw, necesitas especificar las dimensiones y el número de canales:
javascript
sharp(rawBuffer, {
raw: {
width: 1920,
height: 1080,
channels: 3 // RGB
}
})Manejo de Errores
javascript
try {
const image = sharp('input.jpg');
await image.toFile('output.jpg');
} catch (error) {
console.error('Procesamiento de imagen fallido:', error.message);
}Consejos de Rendimiento
- Reutilizar instancias: Reutiliza instancias de Sharp siempre que sea posible
- Procesamiento por streams: Para archivos grandes, usa procesamiento por streams
- Gestión de memoria: Libera instancias innecesarias a tiempo
javascript
// Buena práctica
const sharp = require('sharp');
const image = sharp('input.jpg');
// Procesar múltiples operaciones
await image
.resize(300, 200)
.jpeg({ quality: 80 })
.toFile('output1.jpg');
await image
.resize(150, 100)
.png()
.toFile('output2.jpg');