节点js动态图像 - 错误

时间:2014-01-24 11:43:02

标签: image node.js

这段代码用于根据设置的高度和宽度参数创建动态图像.Say localhost:3000/50/50会给出宽度为50和高度为50的图像。我正在使用此代码来自github ..我在我的系统中安装了imageMagick。

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);

这是我得到的错误

  

events.js:72           扔掉//未处理的'错误'事件                 ^错误:产生ENOENT       在errnoException(child_process.js:980:11)       在Process.ChildProcess._handle.onexit(child_process.js:771:34)

文件nodejs.png与项目存在于同一目录中。我做错了什么?

2 个答案:

答案 0 :(得分:2)

几乎可以肯定你需要安装ImageMagic或GraphicsMagic。我的猜测是gm模块只是图形管理命令行工具的包装器。因此,当您调用resize() node之类的内容时,会尝试调用未找到的/usr/bin/convert,因此您会收到spawn child_process错误。

要安装imagemagic,您可以在Ubuntu中输入sudo apt-get install imagemagic

答案 1 :(得分:1)

在系统中安装imageMagick之后,您需要添加此行代码

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

这就是诀窍,它现在有效..