Skip to content

Referência da API

Sharp fornece uma API rica para processar imagens. Esta página fornece referência detalhada para todos os métodos disponíveis.

Construtor

sharp(input, options?)

Cria uma nova instância Sharp.

javascript
import sharp from 'sharp';

// Criar a partir de arquivo
const image = sharp('input.jpg');

// Criar a partir de Buffer
const image = sharp(buffer);

// Criar a partir de Stream
const image = sharp(stream);

// Criar imagem em branco
const image = sharp({
  create: {
    width: 300,
    height: 200,
    channels: 4,
    background: { r: 255, g: 0, b: 0, alpha: 1 }
  }
});

Metadados de Entrada

metadata()

Obtém informações de metadados da imagem.

javascript
const metadata = await sharp('input.jpg').metadata();
console.log(metadata);
// {
//   format: 'jpeg',
//   width: 1920,
//   height: 1080,
//   space: 'srgb',
//   channels: 3,
//   depth: 'uchar',
//   density: 72,
//   hasProfile: false,
//   hasAlpha: false
// }

stats()

Obtém informações estatísticas da imagem.

javascript
const stats = await sharp('input.jpg').stats();
console.log(stats);
// {
//   isOpaque: true,
//   dominant: { r: 128, g: 128, b: 128 }
// }

Opções de Saída

toFile(filename, callback?)

Salva a imagem processada em arquivo.

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

toBuffer(options?, callback?)

Saída da imagem processada como Buffer.

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

toFormat(format, options?)

Define o formato de saída.

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

// PNG
await sharp('input.jpg')
  .png({ compressionLevel: 9, adaptiveFiltering: true })
  .toFile('output.png');

// WebP
await sharp('input.jpg')
  .webp({ quality: 80, effort: 6 })
  .toFile('output.webp');

// AVIF
await sharp('input.jpg')
  .avif({ quality: 80, effort: 4 })
  .toFile('output.avif');

// TIFF
await sharp('input.jpg')
  .tiff({ quality: 80, compression: 'lzw' })
  .toFile('output.tiff');

Ajuste de Imagem

resize(width?, height?, options?)

Redimensiona a imagem.

javascript
// Redimensionamento básico
await sharp('input.jpg')
  .resize(300, 200)
  .toFile('output.jpg');

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

// Usar modo de ajuste
await sharp('input.jpg')
  .resize(300, 200, {
    fit: 'cover',        // Cortar para ajustar
    position: 'center',  // Cortar centralizado
    background: { r: 255, g: 255, b: 255, alpha: 1 }
  })
  .toFile('output.jpg');

// Usar kernel
await sharp('input.jpg')
  .resize(300, 200, {
    kernel: sharp.kernel.lanczos3
  })
  .toFile('output.jpg');

extract(region)

Corta região da imagem.

javascript
await sharp('input.jpg')
  .extract({ left: 100, top: 100, width: 200, height: 200 })
  .toFile('cropped.jpg');

trim(threshold?)

Corta automaticamente bordas transparentes ou brancas.

javascript
await sharp('input.png')
  .trim()
  .toFile('trimmed.png');

Operações de Imagem

rotate(angle, options?)

Rotaciona a imagem.

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

// Rotacionar e preencher fundo
await sharp('input.jpg')
  .rotate(45, { background: { r: 255, g: 255, b: 255, alpha: 1 } })
  .toFile('rotated.jpg');

flip(flip?)

Inverte a imagem verticalmente.

javascript
await sharp('input.jpg')
  .flip()
  .toFile('flipped.jpg');

flop(flop?)

Inverte a imagem horizontalmente.

javascript
await sharp('input.jpg')
  .flop()
  .toFile('flopped.jpg');

affine(matrix, options?)

Aplica transformação afim.

javascript
await sharp('input.jpg')
  .affine([[1, 0.3], [0, 1]], { background: { r: 255, g: 255, b: 255, alpha: 1 } })
  .toFile('transformed.jpg');

Efeitos de Filtro

blur(sigma?)

Aplica desfoque gaussiano.

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

sharpen(sigma?, flat?, jagged?)

Aplica filtro de nitidez.

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

// Parâmetros de nitidez personalizados
await sharp('input.jpg')
  .sharpen(1, 1, 2)
  .toFile('sharpened.jpg');

median(size?)

Aplica filtro mediano.

javascript
await sharp('input.jpg')
  .median(3)
  .toFile('median.jpg');

flatten(options?)

Mescla canal de transparência.

javascript
await sharp('input.png')
  .flatten({ background: { r: 255, g: 255, b: 255 } })
  .toFile('flattened.jpg');

Operações de Cor

grayscale(grayscale?)

Converte para imagem em escala de cinza.

javascript
await sharp('input.jpg')
  .grayscale()
  .toFile('grayscale.jpg');

negate(negate?)

Efeito negativo.

javascript
await sharp('input.jpg')
  .negate()
  .toFile('negated.jpg');

modulate(options?)

Ajusta brilho, saturação e matiz.

javascript
await sharp('input.jpg')
  .modulate({
    brightness: 1.2,    // Brilho
    saturation: 0.8,    // Saturação
    hue: 90             // Matiz
  })
  .toFile('modulated.jpg');

tint(rgb)

Aplica matiz.

javascript
await sharp('input.jpg')
  .tint({ r: 255, g: 0, b: 0 })
  .toFile('tinted.jpg');

removeAlpha()

Remove canal de transparência.

javascript
await sharp('input.png')
  .removeAlpha()
  .toFile('no-alpha.jpg');

ensureAlpha()

Garante que há canal de transparência.

javascript
await sharp('input.jpg')
  .ensureAlpha()
  .toFile('with-alpha.png');

Operações de Canal

bandbool(boolean)

Aplica operação booleana aos canais.

javascript
await sharp('input.jpg')
  .bandbool('and')
  .toFile('bandbool.jpg');

joinChannel(channels)

Combina canais.

javascript
await sharp('input.jpg')
  .joinChannel(['red.jpg', 'green.jpg', 'blue.jpg'])
  .toFile('joined.jpg');

extractChannel(channel)

Extrai canal único.

javascript
await sharp('input.jpg')
  .extractChannel('red')
  .toFile('red-channel.jpg');

Propriedades Globais

sharp.versions

Obtém informações de versão.

javascript
console.log(sharp.versions);
// {
//   sharp: '0.32.0',
//   vips: '8.14.0'
// }

sharp.format

Obtém formatos suportados.

javascript
console.log(sharp.format);
// {
//   jpeg: { id: 'jpeg', ... },
//   png: { id: 'png', ... },
//   webp: { id: 'webp', ... },
//   ...
// }

sharp.kernel

Obtém kernels disponíveis.

javascript
console.log(sharp.kernel);
// {
//   nearest: 'nearest',
//   cubic: 'cubic',
//   mitchell: 'mitchell',
//   lanczos2: 'lanczos2',
//   lanczos3: 'lanczos3'
// }

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
const pipeline = sharp()
  .resize(300, 200)
  .jpeg({ quality: 80 });

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

Processamento Concorrente

javascript
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';

async function processImage() {
  try {
    // Obter metadados
    const metadata = await sharp('input.jpg').metadata();
    console.log('Dimensões da imagem original:', metadata.width, 'x', metadata.height);

    // Criar múltiplas versões
    const promises = [
      // Miniatura
      sharp('input.jpg')
        .resize(150, 150, { fit: 'cover' })
        .jpeg({ quality: 90 })
        .toFile('thumbnail.jpg'),

      // Tamanho médio
      sharp('input.jpg')
        .resize(800, 600, { fit: 'inside' })
        .webp({ quality: 80 })
        .toFile('medium.webp'),

      // Tamanho grande
      sharp('input.jpg')
        .resize(1920, 1080, { fit: 'inside' })
        .jpeg({ quality: 85, progressive: true })
        .toFile('large.jpg'),

      // Versão em escala de cinza
      sharp('input.jpg')
        .grayscale()
        .jpeg({ quality: 80 })
        .toFile('grayscale.jpg')
    ];

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

processImage();

Próximos Passos

Lançado sob a Licença Apache 2.0.