Prasanna Aarthi
Prasanna Aarthi

Reputation: 3453

Node js dynamic images- error

This piece of code is used to create dynamic images based on the height and width parameters set ..Say localhost:3000/50/50 would give an image of width 50 and height 50..I am using this code I got from github..I have installed imageMagick in my system.

var http = require('http');
var url = require('url');
var fs = require('fs');
var gm = require('gm');

var server = http.createServer(function(request, response){
    var url_parts = url.parse(request.url).path.substring(1).split("/");

    var width = parseInt(url_parts[0]);
    var height = parseInt(url_parts[1]);
    var max = Math.max(width, height);

    if(!isNaN(width) && !isNaN(height))
    {
        response.writeHead(200, {'content-type': 'image/png'});
        gm('nodejs.png').
            resize(max, max).
            crop(width, height, 0, 0).
            stream(function(err, stdout, stderr){
                if(err) {
                    console.log(err)
                }
                else {
                    stdout.pipe(response);
                }
            });
    }
    else {
        response.writeHead(400, {'content-type' : 'text/plain'});
        response.end();
    }
})
.listen(3000);

This is the error I get

events.js:72 throw er; // Unhandled 'error' event ^ Error: spawn ENOENT at errnoException (child_process.js:980:11) at Process.ChildProcess._handle.onexit (child_process.js:771:34)

The file nodejs.png exists in the same directory as that of the project.What is is that I am doing wrong?

Upvotes: 1

Views: 843

Answers (2)

Prasanna Aarthi
Prasanna Aarthi

Reputation: 3453

You need to add this line.. of code after installign imageMagicks in your system

var gm = require('gm').subClass({ imageMagick: true });

This did the trick and it works now..

Upvotes: 1

exebook
exebook

Reputation: 33900

Almost certainly you need to install ImageMagic or GraphicsMagic. My guess is that gm module is just a wrapper around the graphic management command line tools. So when you invokesomething like resize() node will try to invoke /usr/bin/convert which is not found, thus you receive spawn child_process error.

To install imagemagic you could type sudo apt-get install imagemagic in Ubuntu.

Upvotes: 2

Related Questions