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
- Reutilizar instâncias: Reutilize instâncias Sharp sempre que possível
- Processamento em stream: Para arquivos grandes, use processamento em stream
- 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');