Qual biblioteca devo usar para manipulação de imagens do lado do servidor no Node.JS? [fechadas]


117

Encontrei uma lista bastante grande de bibliotecas disponíveis no wiki do Node.JS, mas não tenho certeza de quais delas são mais maduras e oferecem melhor desempenho. Basicamente, eu quero fazer o seguinte:

  1. carregar algumas imagens para um servidor de fontes externas
  2. coloque-os em uma grande tela
  3. cortar e mascará-los um pouco
  4. aplique um ou dois filtros
  5. Redimensione a imagem final e dê um link para ela

Grande vantagem se o pacote de nó funcionar em Linux e Windows .


Pergunta já respondida aqui: stackoverflow.com/questions/4541332/…
DjebbZ

2
2015: isso também parece legítimo: github.com/oliver-moran/jimp
jmunsch

@jm_____ stackoverflow é tanto um Q&A quanto um wiki. sinta-se à vontade para editar a resposta para que mais pessoas a notem.
Andrew Андрей Листочкин

Respostas:


184

Respondendo minha própria pergunta

Passei dois dias vasculhando as bibliotecas gráficas do Node.js.

node-canvas

  • Eu tentei primeiro porque estou bastante familiarizado com <canvas>API. É uma grande vantagem para uma biblioteca.
  • requer Cairo, que não tem um download fácil do Windows. Eu encontrei na distribuição GTK + embora.
  • além disso, ele precisa que o código de ligação da biblioteca nativa seja compilado na instalação do módulo. Ele usa o Node-Waf que ainda não foi portado para o Windows.

gm

  • maduro
  • funciona no Windows sem problemas
  • documentos estão ok, mas não completos: eu tive que pesquisar o código-fonte para descobrir qual API está disponível
  • infelizmente, não há uma maneira fácil de combinar imagens com gm. Talvez haja alguma maneira de conseguir isso, mas eu não encontrei depois de duas horas gastas com isso.

node-imagemagick

  • O repo oficial tem poucos comandos básicos do ImageMagick cobertos, mas usei esse fork (bom que o NPM pode extrair bibliotecas diretamente dos repositórios git). Tem ligações para montagefazer exatamente o que preciso.
  • ImageMagick é bastante lento , embora funcione no Windows.

Node-Vips

  • Grande vantagem: ele usa uma incrível biblioteca VIPS com a qual estou familiarizado. VIPS é muito rápido e otimizado para imagens grandes. É muito inteligente na utilização de recursos de hardware: se sua máquina tiver muita RAM, ela fará todo o processamento na memória, mas mudará para caches de disco rígido se a memória for escassa ou necessária para outros aplicativos.
  • da mesma forma que o node-canvas, ele requer o Node-Waf, portanto ainda não está disponível para Windows.

Também olhei para outras bibliotecas da lista, mas a maioria delas é muito imatura ou não se adequa ao meu caso de uso. Eu realmente gostaria de tentar migrar para o Node-Canvas ou Node-Vips quando o Node-Waf for portado para o Windows, mas até então vou me limitar ao node-imagemagick.


44
Obrigado por voltar para responder sua própria pergunta. Ótimo, escreva!
maio

No Windows, gm pareceu um pouco lento para mim - embora eu ache que isso se deve em parte ao tempo que levou para gerar instâncias do executável gm.
Gareth Oakley

11
O tempo mudou e o NODE-Vips teve 1 ano + nenhuma atualização. Eu recomendo adicionar Sharp à lista. Ele também usa VIPS e é mantido ativamente
Simon Fakir

5
Para aqueles que estão entrando nessa questão atualmente, o LWIP é outra boa alternativa. Sem dependências externas, ele conta com um addon node.js C ++.
MaxArt

1
github.com/lovell/sharp , outra ligação de nó para libvips, agora funciona no Windows.
jcupitt

6

Eu recomendo fortemente que você verifique o gm com GraphicsMagick. Estável, rico em recursos, API limpa, ótimos documentos e rápido.

E funciona tanto no Windows quanto no Linux / MacOS / BSD / ...


3

Aqui está o link para a implementação do canvas com base em GDI +


1
Eu não consigo fazer isso funcionar. Acabei de receber "% 1 não é um aplicativo Win32 válido" assim que solicito.
mpen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.