Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which library should I use for server-side image manipulation on Node.JS? [closed]

People also ask

Which library provides node JS?

When using Node. js, a special library module called libuv is used to perform async operations. This library is also used, together with the back logic of Node, to manage a special thread pool called the libuv thread pool.

Is NodeJS suitable for image processing?

Not that it's not possible, you can read bytes and manipulate them, so it's possible, but it would not be the best fit. Node is single threaded and image manipulation is usually CPU-bound and highly parallelizable so multithreaded implementations are likely to be faster.

What are node js is popularly used libraries?

List of Popular NodeJS libraries. Express, one of the best Node. js libraries, has earned the reputation as the library that has the flexible, minimalist web framework for NodeJS. Install Express using the npm install command.


Answering my own question

I spent two days digging through Node.js graphics libraries.

node-canvas

  • I tried it first since I'm quite familiar with <canvas> API. It's a huge plus for a library.
  • it requires Cairo which doesn't have an easy Windows download. I found it in GTK+ distribution though.
  • moreover it needs native library binding code to be compiled on module installation. It uses Node-Waf which hasn't being ported to Windows yet.

gm

  • mature
  • runs on Windows smoothly
  • docs are ok but not thorough: I had to look up into source code to figure out what API is available
  • unfortunately there's no easy way to combine images with gm. Maybe there's some way to achieve that but I haven't found one after two hours spent with it.

node-imagemagick

  • The official repo has very few basic ImageMagick commands covered but I used this fork (good thing that NPM can pull libraries directly from git repositories). It has bindings for montage which does exactly what I need.
  • ImageMagick is quite slow, though it works on Windows.

Node-Vips

  • Huge plus: it uses an incredible VIPS library which I'm familiar with. VIPS is very fast and optimized for large images. It's very smart about utilizing hardware resources: if your machine has a lot of RAM it'll do all processing in memory but will switch to hard-drive caches if memory is scarce or required for other applications.
  • same as node-canvas it requires Node-Waf so it's not available for Windows yet.

I also looked at other libraries from the list but most of them are either very immature or do not suit my use case. I would really like to try migrating to either Node-Canvas or Node-Vips when Node-Waf gets ported to Windows but until then I'll stick to node-imagemagick.


I'd strongly advise you to check gm with GraphicsMagick. Stable, feature rich, clean API, great docs, and fast.

And it works both on Windows and Linux / MacOS / BSD / ...


Her is the link to canvas implementation based on GDI+