Trabalhando com Imagens em Node.js: redimensionar e cortar com Sharp
\n\nNo desenvolvimento web moderno, o processamento de imagens no lado do servidor é uma tarefa comum. O Node.js oferece várias bibliotecas poderosas para trabalhar com gráficos. Neste artigo, vamos explorar detalhadamente a biblioteca Sharp — uma ferramenta rápida e eficiente para redimensionar (resize) e cortar (crop) imagens.
\n\nPor que Sharp?
\n\nO Sharp utiliza as bibliotecas nativas libvips, tornando-o uma das soluções mais performáticas para Node.js. Principais vantagens:
\n- \n
- Alta velocidade de processamento (muito mais rápido que alternativas em JavaScript puro) \n
- Baixo consumo de memória \n
- Suporte a todos os formatos populares: JPEG, PNG, WebP, AVIF, TIFF
- API simples e intuitiva
- Possibilidade de trabalhar com streams
Instalação
\n\nA instalação do Sharp em um projeto Node.js é feita com um único comando:
\n\nnpm install sharp\n\nApós a instalação, a biblioteca está pronta para uso. Certifique-se de que as dependências necessárias para a compilação do módulo nativo estejam instaladas no sistema (geralmente isso acontece automaticamente).
\n\nRedimensionamento básico (resize)
\n\nO método resize() permite alterar as dimensões da imagem. Vejamos os principais casos de uso.
Exemplo 1: Redimensionamento simples
\n\nconst sharp = require('sharp');\nconst path = require('path');\n\nasync function resizeImage() {\n try {\n await sharp('input.jpg')\n .resize(300, 200) // largura 300px, altura 200px\n .toFile('output.jpg');\n console.log('Imagem redimensionada com sucesso');\n } catch (error) {\n console.error('Erro:', error);\n }\n}\n\nresizeImage();\n\nNeste exemplo, a imagem será comprimida para as dimensões exatas de 300x200 pixels, o que pode distorcer as proporções.
\n\nExemplo 2: Manter proporções
\n\nasync function resizeWithProportions() {\n await sharp('input.jpg')\n .resize({\n width: 400, // apenas largura\n height: undefined, // altura será calculada automaticamente\n fit: 'inside' // mantém as proporções\n })\n .toFile('output_inside.jpg');\n \n console.log('Proporções mantidas');\n}\n\nO parâmetro fit aceita vários valores:
- \n
cover— corta a imagem para preencher completamente as dimensões definidas (padrão) \n contain— ajusta a imagem dentro das dimensões definidas, mantendo as proporções \n fill— estica a imagem para as dimensões definidas \n inside— reduz a imagem para caber dentro das dimensões definidas \n outside— aumenta a imagem para ultrapassar as dimensões definidas \n
Corte de imagens (crop)
\n\nO Sharp oferece duas formas principais de corte: usando o método extract() e através dos parâmetros do resize().
Método extract()
\n\nPermite recortar uma área retangular da imagem com base em coordenadas definidas:
\n\nasync function cropImage() {\n await sharp('input.jpg')\n .extract({\n left: 100, // margem esquerda\n top: 50, // margem superior\n width: 300, // largura da área\n height: 200 // altura da área\n })\n .toFile('cropped.jpg');\n \n console.log('Corte realizado');\n}\n\nCorte automático ao redimensionar
\n\nFrequentemente é necessário redimensionar e cortar a imagem simultaneamente. Isso é feito com o parâmetro gravity ou position:
async function cropAndResize() {\n await sharp('input.jpg')\n .resize(200, 200, {\n fit: 'cover', // corta para preencher exatamente Também na biblioteca
Trabalhando com S3 e armazenamentos em nuvem em Go: biblioteca minio-go
Autorização e Autenticação em Go (Golang): Guia Completo
WireMock.Net para C# (.NET): guia completo com exemplos
Tokens JWT em Go (Golang): criação e verificação com exemplos