Trabalho com imagens em Node.js: biblioteca Sharp

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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 sharp


Apó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:

Recommendations