Skip to content

Início Rápido

Este guia ajudará você a começar rapidamente com Sharp e aprender operações básicas de processamento de imagem.

Uso Básico

Importar Sharp

javascript
import sharp from 'sharp';

Ou usando CommonJS:

javascript
const sharp = require('sharp');

Ler Imagem

Sharp suporta vários formatos de entrada:

javascript
// Ler de arquivo
const image = sharp('input.jpg');

// Ler de Buffer
const image = sharp(buffer);

// Ler de Stream
const image = sharp(stream);

Operações Básicas

Redimensionar

javascript
// Redimensionar para tamanho especificado
await sharp('input.jpg')
  .resize(300, 200)
  .toFile('output.jpg');

// Manter proporção
await sharp('input.jpg')
  .resize(300, null) // Largura 300, altura automática
  .toFile('output.jpg');

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

Conversão de Formato

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

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

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

Corte

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

Rotação

javascript
// Rotacionar 90 graus
await sharp('input.jpg')
  .rotate(90)
  .toFile('rotated.jpg');

Operações Avançadas

Efeitos de Filtro

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

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

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

Ajuste de Cor

javascript
// Ajustar brilho
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 saturação
await sharp('input.jpg')
  .modulate({ saturation: 0.8 })
  .toFile('desaturated.jpg');

Opções de Saída

Salvar em Arquivo

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

Saída para Buffer

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

Saída para Stream

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

Tratamento de Erros

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

Otimização de Performance

Processamento em Stream

javascript
// Usar stream para arquivos grandes
const pipeline = sharp()
  .resize(300, 200)
  .jpeg({ quality: 80 });

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

Processamento Concorrente

javascript
// Processar múltiplas imagens simultaneamente
const promises = images.map(image => 
  sharp(image)
    .resize(300, 200)
    .jpeg()
    .toBuffer()
);

const results = await Promise.all(promises);

Exemplo Completo

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

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

    // Criar imagem de tamanho médio
    await sharp('input.jpg')
      .resize(800, 600, { fit: 'inside' })
      .webp({ quality: 80 })
      .toFile('medium.webp');

    // Criar imagem de tamanho grande
    await sharp('input.jpg')
      .resize(1920, 1080, { fit: 'inside' })
      .jpeg({ quality: 85 })
      .toFile('large.jpg');

    console.log('Processamento de imagem concluído!');
  } catch (error) {
    console.error('Processamento falhou:', error);
  }
}

processImage();

Próximos Passos

Agora que você aprendeu o uso básico do Sharp, pode:

Lançado sob a Licença Apache 2.0.