Introdução: O que é Sharp e para que serve?
\n\nSharp é uma biblioteca de alto desempenho para processamento de imagens, escrita em C++ e que fornece uma API conveniente para Node.js. Ela permite converter imagens nos formatos JPEG, PNG, WebP, AVIF, TIFF e GIF para outros formatos, redimensionar, cortar, girar, adicionar efeitos e muito mais.
\n\nA principal vantagem do Sharp é a velocidade. A biblioteca utiliza as bibliotecas nativas libvips, tornando-a várias vezes mais rápida que alternativas (como Jimp ou gm). É ideal para:
\n- \n
- Servidores web e APIs — processamento dinâmico de avatares, pré-visualizações, otimização de imagens antes do upload. \n
- Processamento em lote — conversão de milhares de imagens para o formato e tamanho desejados. \n
- Criação de miniaturas e galerias — geração rápida de thumbnails. \n
- Otimização do peso das imagens — compressão sem perda de qualidade (ou com perda controlada). \n
Sharp trabalha com buffers, streams e arquivos, tornando-a flexível para integração em qualquer aplicação Node.js.
\n\nInstalação
\n\nA instalação do Sharp é feita via npm. A biblioteca requer Node.js versão 12.13.0 ou superior (recomendado 14+).
\n\nnpm install sharp\n\nSe você usa yarn:
\n\nyarn add sharp\n\nImportante: O Sharp compila módulos nativos durante a instalação. Se você encontrar erros, certifique-se de que o build-essential (no Linux) ou o Xcode Command Line Tools (no macOS) estão instalados. Para Windows, geralmente é suficiente ter o Visual Studio Build Tools.
\n\nApós a instalação, importe a biblioteca no seu projeto:
\n\nconst sharp = require('sharp');\n\nInício rápido
\n\nVamos escrever um script simples que carrega uma imagem, a reduz para 300 pixels de largura (mantendo a proporção) e a salva no formato WebP.
\n\nconst sharp = require('sharp');\nconst path = require('path');\n\nasync function quickStart() {\n try {\n await sharp('input.jpg')\n .resize(300) // Largura 300px, altura ajustada automaticamente\n .webp({ quality: 80 }) // Converte para WebP com qualidade 80%\n .toFile('output.webp');\n \n console.log('Imagem processada com sucesso!');\n } catch (error) {\n console.error('Erro:', error);\n }\n}\n\nquickStart();\n\nEste exemplo demonstra o encadeamento de métodos (chaining), que é a base do trabalho com Sharp. Cada método retorna uma nova instância do Sharp, permitindo aplicar transformações sequencialmente.
\n\nMétodos e funções principais
\n\nAbaixo estão 10 métodos-chave do Sharp com descrição detalhada, parâmetros e exemplos de código.
\n\n1. resize() — Redimensionamento de imagem
\nO que faz: Altera a largura e/ou altura da imagem. Pode cortar ou ajustar a imagem dentro de limites definidos.
\nParâmetros:
\n- \n
width(number, opcional) — nova largura em pixels. \n height(number, opcional) — nova altura em pixels. \n options(object, opcional):\n- \n
fit(string) — modo de ajuste: 'cover' (preencher, cortando o excesso), 'contain' (ajustar completamente), 'fill' (esticar), 'inside' (reduzir para caber), 'outside' (aumentar até ultrapassar os limites). Padrão: 'cover'. \n position(string) — posição ao cortar: 'center', 'top', 'left', 'right', 'bottom', etc. \n withoutEnlargement(boolean) — proibir o aumento da imagem. \n
\n
Exemplo:
\n// Reduzir para 200x200, cortando pelo centro\nawait sharp