Skip to content

Inicio Rápido

Esta guía te ayudará a comenzar rápidamente con Sharp y aprender operaciones básicas de procesamiento de imágenes.

Uso Básico

Importar Sharp

javascript
import sharp from 'sharp';

O usar CommonJS:

javascript
const sharp = require('sharp');

Leer Imagen

Sharp soporta múltiples formatos de entrada:

javascript
// Leer desde archivo
const image = sharp('input.jpg');

// Leer desde Buffer
const image = sharp(buffer);

// Leer desde Stream
const image = sharp(stream);

Operaciones Básicas

Redimensionar

javascript
// Redimensionar a tamaño especificado
await sharp('input.jpg')
  .resize(300, 200)
  .toFile('output.jpg');

// Mantener relación de aspecto
await sharp('input.jpg')
  .resize(300, null) // Ancho 300, alto automático
  .toFile('output.jpg');

// Usar diferentes modos de ajuste
await sharp('input.jpg')
  .resize(300, 200, {
    fit: 'cover',    // Recortar para ajustar
    position: 'center' // Recortar centrado
  })
  .toFile('output.jpg');

Conversión de Formatos

javascript
// Convertir a JPEG
await sharp('input.png')
  .jpeg({ quality: 80 })
  .toFile('output.jpg');

// Convertir a WebP
await sharp('input.jpg')
  .webp({ quality: 80 })
  .toFile('output.webp');

// Convertir a PNG
await sharp('input.jpg')
  .png({ compressionLevel: 9 })
  .toFile('output.png');

Recortar

javascript
// Recortar región especificada
await sharp('input.jpg')
  .extract({ left: 100, top: 100, width: 200, height: 200 })
  .toFile('cropped.jpg');

Rotar

javascript
// Rotar 90 grados
await sharp('input.jpg')
  .rotate(90)
  .toFile('rotated.jpg');

Operaciones Avanzadas

Efectos de Filtro

javascript
// Desenfoque
await sharp('input.jpg')
  .blur(5)
  .toFile('blurred.jpg');

// Nitidez
await sharp('input.jpg')
  .sharpen()
  .toFile('sharpened.jpg');

// Escala de grises
await sharp('input.jpg')
  .grayscale()
  .toFile('grayscale.jpg');

Ajuste de Color

javascript
// Ajustar brillo
await sharp('input.jpg')
  .modulate({ brightness: 1.2 })
  .toFile('bright.jpg');

// Ajustar contraste
await sharp('input.jpg')
  .modulate({ contrast: 1.5 })
  .toFile('contrast.jpg');

// Ajustar saturación
await sharp('input.jpg')
  .modulate({ saturation: 0.8 })
  .toFile('desaturated.jpg');

Opciones de Salida

Guardar en Archivo

javascript
await sharp('input.jpg')
  .resize(300, 200)
  .toFile('output.jpg');

Salida a Buffer

javascript
const buffer = await sharp('input.jpg')
  .resize(300, 200)
  .jpeg()
  .toBuffer();

Salida a Stream

javascript
sharp('input.jpg')
  .resize(300, 200)
  .jpeg()
  .pipe(fs.createWriteStream('output.jpg'));

Manejo de Errores

javascript
try {
  await sharp('input.jpg')
    .resize(300, 200)
    .toFile('output.jpg');
} catch (error) {
  console.error('Procesamiento de imagen fallido:', error);
}

Optimización de Rendimiento

Procesamiento por Streams

javascript
// Usar streams al procesar archivos grandes
const pipeline = sharp()
  .resize(300, 200)
  .jpeg({ quality: 80 });

fs.createReadStream('large-input.jpg')
  .pipe(pipeline)
  .pipe(fs.createWriteStream('output.jpg'));

Procesamiento Concurrente

javascript
// Procesar múltiples imágenes simultáneamente
const promises = images.map(image => 
  sharp(image)
    .resize(300, 200)
    .jpeg()
    .toBuffer()
);

const results = await Promise.all(promises);

Ejemplo Completo

javascript
import sharp from 'sharp';
import fs from 'fs';

async function processImage() {
  try {
    // Crear miniatura
    await sharp('input.jpg')
      .resize(150, 150, { fit: 'cover' })
      .jpeg({ quality: 90 })
      .toFile('thumbnail.jpg');

    // Crear imagen de tamaño medio
    await sharp('input.jpg')
      .resize(800, 600, { fit: 'inside' })
      .webp({ quality: 80 })
      .toFile('medium.webp');

    // Crear imagen de tamaño grande
    await sharp('input.jpg')
      .resize(1920, 1080, { fit: 'inside' })
      .jpeg({ quality: 85 })
      .toFile('large.jpg');

    console.log('¡Procesamiento de imágenes completado!');
  } catch (error) {
    console.error('Procesamiento fallido:', error);
  }
}

processImage();

Próximos Pasos

Ahora que has aprendido el uso básico de Sharp, puedes:

Liberado bajo la Licencia Apache 2.0.