Której biblioteki należy używać do manipulacji obrazami po stronie serwera w Node.JS? [Zamknięte]

117

Znalazłem dość dużą listę dostępnych bibliotek na wiki Node.JS, ale nie jestem pewien, które z nich są bardziej dojrzałe i zapewniają lepszą wydajność. Zasadniczo chcę wykonać następujące czynności:

  1. załaduj niektóre obrazy na serwer ze źródeł zewnętrznych
  2. połóż je na jednym dużym płótnie
  3. przytnij je i trochę zamaskuj
  4. zastosuj jeden lub dwa filtry
  5. Zmień rozmiar ostatecznego obrazu i podaj do niego link

Duży plus, jeśli pakiet węzłów działa zarówno w systemie Linux, jak i Windows .

Andrew Андрей Листочкин
źródło
Pytanie już tu odpowiedział: stackoverflow.com/questions/4541332/…
DjebbZ
2
2015: to również wydaje się prawidłowe
jmunsch
@jm_____ stackoverflow to zarówno pytania i odpowiedzi, jak i wiki. nie krępuj się edytować odpowiedzi, aby więcej osób ją zauważyło.
Andrew Андрей Листочкин

Odpowiedzi:

184

Odpowiadając na moje własne pytanie

Spędziłem dwa dni, przeglądając biblioteki graficzne Node.js.

node-canvas

  • Wypróbowałem to najpierw, ponieważ dobrze znam <canvas>API. Jak na bibliotekę to ogromny plus.
  • wymaga Kairu, który nie ma łatwego pobierania dla systemu Windows. Znalazłem go jednak w dystrybucji GTK +.
  • ponadto wymaga skompilowania natywnego kodu powiązania biblioteki podczas instalacji modułu. Używa Node-Waf, który nie został jeszcze przeniesiony do systemu Windows.

gm

  • dojrzały
  • działa płynnie w systemie Windows
  • dokumenty są w porządku, ale nie są dokładne: musiałem zajrzeć do kodu źródłowego, aby dowiedzieć się, jakie API jest dostępne
  • niestety nie ma łatwego sposobu na połączenie zdjęć za pomocą gm. Może jest na to sposób, ale po dwóch godzinach spędzonych z nim nie znalazłem.

node-imagemagick

  • Oficjalne repozytorium zawiera bardzo niewiele podstawowych poleceń ImageMagick, ale użyłem tego rozwidlenia (dobrze, że NPM może pobierać biblioteki bezpośrednio z repozytoriów git). Ma wiązania, montagektóre robią dokładnie to, czego potrzebuję.
  • ImageMagick jest dość powolny , chociaż działa w systemie Windows.

Node-Vips

  • Ogromny plus: wykorzystuje niesamowitą bibliotekę VIPS, którą znam. VIPS jest bardzo szybki i zoptymalizowany pod kątem dużych obrazów. Wykorzystywanie zasobów sprzętowych jest bardzo sprytne: jeśli twój komputer ma dużo pamięci RAM, będzie przetwarzał całą pamięć, ale przełączy się na pamięci podręczne dysku twardego, jeśli brakuje pamięci lub jest wymagana dla innych aplikacji.
  • tak samo jak node-canvas, wymaga Node-Waf, więc nie jest jeszcze dostępny dla Windows.

Przyjrzałem się także innym bibliotekom z listy, ale większość z nich jest albo bardzo niedojrzała, albo nie pasuje do mojego przypadku użycia. Naprawdę chciałbym spróbować przeprowadzić migrację do Node-Canvas lub Node-Vips, gdy Node-Waf zostanie przeniesiony do Windows, ale do tego czasu będę trzymał się node-imagemagick.

Andrew Андрей Листочкин
źródło
44
Dziękuję za przybycie i udzielenie odpowiedzi na własne pytanie. Świetnie napisać!
mpen
W systemie Windows gm wydawał mi się trochę powolny - chociaż myślę, że częściowo wynika to z tego, jak długo trwało odradzanie się instancji pliku wykonywalnego gm.
Gareth Oakley
11
Czas się zmienił i NODE-Vips miał 1 rok + bez aktualizacji. Zamiast tego polecam dodanie Sharp do listy. Używa również VIPS i jest aktywnie utrzymywana: github.com/lovell/sharp
Simon Fakir
5
Dla tych, którzy wchodzą obecnie w tę kwestię, LWIP jest kolejną dobrą alternatywą. Brak zależności zewnętrznych, polega na dodatku node.js w C ++.
MaxArt
1
github.com/lovell/sharp , kolejne powiązanie węzła dla libvips, teraz działa w systemie Windows.
jcupitt
6

Zdecydowanie radzę sprawdzić gm z GraphicsMagick. Stabilne, bogate w funkcje, czyste API, świetne dokumenty i szybkie.

I działa zarówno w systemie Windows, jak i Linux / MacOS / BSD / ...

Pierre
źródło
3

Ona jest linkiem do implementacji kanwy opartej o GDI +

pastorgluk
źródło
1
W ogóle nie mogę tego uruchomić. Po prostu otrzymuję komunikat „% 1 nie jest poprawną aplikacją Win32”, gdy tylko tego potrzebuję.
mpen