Biblioteca Sharp para trabalhar com imagens em Node.js
No desenvolvimento web moderno, o processamento de imagens no lado do servidor é uma tarefa criticamente importante. Node.js, graças à sua arquitetura orientada a eventos, lida muito bem com essa tarefa. Entre as diversas bibliotecas para trabalhar com imagens, um lugar especial é ocupado pelo Sharp — um módulo de alto desempenho de código aberto, escrito em C++ e que utiliza a biblioteca libvips.
O que é Sharp?
Sharp é um módulo Node.js para processamento rápido de imagens. Ele suporta os formatos JPEG, PNG, WebP, AVIF, TIFF e GIF. As principais funcionalidades incluem redimensionamento, corte, rotação, correção de cor, sobreposição de marcas d'água e conversão entre formatos. Graças ao uso do libvips, o Sharp é 4 a 5 vezes mais rápido do que bibliotecas similares (como ImageMagick ou GraphicsMagick).
Instalação
A instalação é feita via npm. Certifique-se de que os compiladores C++ (gcc ou clang) e o libvips estejam instalados no sistema (em alguns SOs, é necessária instalação prévia).
npm install sharpApós a instalação, você pode importar o módulo para o seu projeto:
const sharp = require('sharp');Operações básicas com imagens
1. Redimensionamento (resize)
A tarefa mais comum é reduzir ou aumentar o tamanho da imagem. O Sharp permite definir largura, altura ou ambos os valores simultaneamente. Se apenas um parâmetro for especificado, o segundo será calculado proporcionalmente.
const sharp = require('sharp');
async function resizeImage() { try { await sharp('input.jpg') .resize(300, 200) // largura 300px, altura 200px .toFile('output-resized.jpg'); console.log('Imagem redimensionada'); } catch (error) { console.error('Erro:', error); }}
resizeImage();Para manter as proporções, use fit:
const sharp = require('sharp');
async function resizeWithFit() { await sharp('input.jpg') .resize({ width: 300, height: 200, fit: 'inside' // 'cover', 'contain', 'fill', 'inside', 'outside' }) .toFile('output-fit.jpg');}
resizeWithFit();2. Corte (crop)
O corte permite remover partes indesejadas da imagem. O Sharp suporta corte por coordenadas específicas ou por estratégia (por exemplo, corte central).
const sharp = require('sharp');
async function cropImage() { await sharp('input.jpg') .extract({ left: 100, top: 50, width: 400, height: 300 }) .toFile('output-cropped.jpg');}
cropImage();Você também pode usar resize com a opção crop:
const sharp = require('sharp');
async function cropWithResize() { await sharp('input.jpg') .resize(200, 200, { fit: 'cover', position: 'centre' }) .toFile('output-cover.jpg');}
cropWithResize();3. Conversão de formatos
O Sharp permite converter facilmente imagens de um formato para outro. Basta especificar a extensão no arquivo de saída ou usar o método .toFormat().
const sharp = require('sharp');
async function convertToWebP() { await sharp('input.png') .toFormat('webp') .toFile('output.webp');}
async function convertToJpeg() { await sharp('input.webp') .jpeg({ quality: 80 }) .toFile('output.jpg');}
convertToWebP();convertToJpeg();4. Trabalho com metadados
Você pode extrair metadados da imagem: dimensões, espaço de cores, DPI, dados EXIF, etc.
const sharp = require('sharp');
async function getMetadata() { const metadata = await sharp('input.jpg').metadata(); console.log('Metadados:', metadata); // { format: Também na biblioteca
Envio de SMS em TypeScript: Bibliotecas de API e Integração
Testes em C++: visão geral de frameworks e ferramentas (Google Test, Catch2, doctest)
Rocket para Rust: guia completo com exemplos práticos