magickwand

native bindings for imagemagick convert

magickwand

Native bindings for imagemagick to resize and compress images. This can be used to dynamically resize images in an express/connect based server. See examples/cdn.js for an example of connect middleware using magickwand.

Most other modules exposing imagemagick invoke the convert utility as a child process, instead of making direct C API calls. While this works, API calls are much faster than invoking convert, and that is the motivation for this module.

var magickwand = require('magickwand');
var fs = require('fs');
 
magickwand.resize('<pathtoimagefile>', { width: 300, height: 200, quality: 80 } ,function(err,data) {
  fs.writeFile('/tmp/def.jpg',data,"binary");
});

To maintain aspect ratio while resizing, set one of the width/height parameters to 0. The callback is passed an info argument that has the width/height of the newly resized image, and is useful in case you chose to preserve the aspect ratio

magickwand.resize('<pathtoimagefile>', { width: 100 },function(err,data,info) {
  fs.writeFile('/tmp/def.jpg',data,"binary");
  console.log('new height is ' + info.height);
});

To convert to another supported format, use the format argument

magickwand.resize('<pathtoimagefile>', { format: 'png', width: 300, height: 250 },function(err,data) {
  fs.writeFile('/tmp/def.jpg',data,"binary");
});

See examples/cdn.js on how to use this module as a middleware in connect.

magickwand uses the C library by the same name, so libmagickwand-dev should be installed.

On Ubuntu, for example

sudo apt-get install libmagickwand-dev

On Mac - you can use homebrew to install imagemagick.

brew install pkg-config
brew install imagemagick  --disable-openmp

I had trouble using the default recipe for imagemagick, as openmp would cause node process to hang. Make sure you have disabled openmp while building Imagemagick.If you use homebrew, use the --disable-openmp option while installing imagemagick.

On SmartOS, install using pkgin

pkgin ImageMagick
$ npm install magickwand
$ git clone git://github.com/qzaidi/magickwand.git
$ node-gyp configure build