Skip to content

Construtor Sharp

Sharp é uma biblioteca de processamento de imagens de alto desempenho para Node.js. O construtor é o ponto de partida para usar o Sharp.

Uso Básico

javascript
import sharp from 'sharp';

// Criar instância Sharp a partir de caminho de arquivo
const image = sharp('input.jpg');

// Criar instância Sharp a partir de Buffer
const image = sharp(inputBuffer);

// Criar instância Sharp a partir de Stream
const image = sharp(inputStream);

Parâmetros do Construtor

Fonte de Entrada

O construtor Sharp aceita várias fontes de entrada:

javascript
// Caminho de arquivo
sharp('input.jpg')

// Buffer
sharp(buffer)

// Stream
sharp(stream)

// URL
sharp('https://example.com/image.jpg')

// Múltiplas fontes de entrada
sharp(['input1.jpg', 'input2.jpg'])

Objeto de Opções

javascript
sharp(input, {
  // Opções de entrada
  input: {
    failOnError: false,
    limitInputPixels: 268402689,
    sequentialRead: false
  },
  
  // Opções de página (para imagens multipágina)
  pages: -1,
  
  // Opções de dados brutos
  raw: {
    width: 1920,
    height: 1080,
    channels: 3
  }
})

Opções de Entrada

failOnError

  • Tipo: boolean
  • Padrão: true
  • Descrição: Se deve lançar exceção ao encontrar erro
javascript
sharp('input.jpg', { failOnError: false })
  .resize(300, 200)
  .toFile('output.jpg')
  .catch(err => console.log('Processamento falhou:', err));

limitInputPixels

  • Tipo: number
  • Padrão: 268402689 (16384 x 16384)
  • Descrição: Limita o número de pixels da imagem de entrada
javascript
sharp('large-image.jpg', { 
  limitInputPixels: 100000000 
})

sequentialRead

  • Tipo: boolean
  • Padrão: false
  • Descrição: Se deve ler os dados da imagem sequencialmente
javascript
sharp('input.jpg', { sequentialRead: true })

Imagens Multipágina

Para imagens multipágina (como TIFF, PDF), você pode especificar quais páginas processar:

javascript
// Processar todas as páginas
sharp('multi-page.tiff', { pages: -1 })

// Processar página específica (começando em 0)
sharp('multi-page.tiff', { pages: 0 })

// Processar múltiplas páginas
sharp('multi-page.tiff', { pages: [0, 2, 4] })

Dados de Imagem Brutos

Ao processar dados de imagem brutos, é necessário especificar dimensões e número de canais:

javascript
sharp(rawBuffer, {
  raw: {
    width: 1920,
    height: 1080,
    channels: 3  // RGB
  }
})

Tratamento de Erros

javascript
try {
  const image = sharp('input.jpg');
  await image.toFile('output.jpg');
} catch (error) {
  console.error('Processamento de imagem falhou:', error.message);
}

Dicas de Performance

  1. Reutilizar instâncias: Reutilize instâncias Sharp sempre que possível
  2. Processamento em stream: Para arquivos grandes, use processamento em stream
  3. Gerenciamento de memória: Libere instâncias desnecessárias prontamente
javascript
// Boa prática
const sharp = require('sharp');
const image = sharp('input.jpg');

// Processar múltiplas operações
await image
  .resize(300, 200)
  .jpeg({ quality: 80 })
  .toFile('output1.jpg');

await image
  .resize(150, 100)
  .png()
  .toFile('output2.jpg');

Lançado sob a Licença Apache 2.0.