错误:在节点中使用GM时生成ENOENT

时间:2013-04-25 18:31:48

标签: node.js graphicsmagick

当我尝试调整像这样的图像时:

                gm('public/uploads/1710410635.jpg')
                .resize(240, 240)
                .noProfile()
                .write('public/uploads/1710410635_t.jpg', function (err) {
                  if (!err) console.log('done');
                });

我收到此错误:

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

我的文件结构如下:

enter image description here

代码在postnewsitem.js文件

中执行

为什么会发生此错误&我该如何解决?

编辑:GraphicsMagick有效,证明:

enter image description here

9 个答案:

答案 0 :(得分:65)

安装ImageMagick并使用subClass imageMagick。

  1. 安装ImageMagick

    sudo apt-get install imagemagick
    
  2. 使用subClass imagemagick:

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

答案 1 :(得分:11)

我在Windows 7上运行了nodejs,安装了gm和imagemagick,似乎两个模块之间存在冲突,所以我用Google搜索了一下,然后找出了如何避免这种情况。我添加了这一行,解决了我的ENOENT问题: var imageMagick = gm.subClass({ imageMagick: true }); 所以代码现在看起来像这样:

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

imageMagick('test/pig.jpg').rotate('green', 45).write('test/crazy_pig.jpg', function (err) {
    if (!err) console.log('crazy pig has arrived');
    else console.log(err);
})

或者你可以在需要gm时这样做,如下:

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

答案 2 :(得分:4)

使用IIS在Windows上运行的Node.js应用程序存在同样的问题。当我将相应AppPool的“高级设置”中的“加载用户个人资料”选项设置为“ True

时出现问题

答案 3 :(得分:1)

如果您尝试从UNC路径运行代码,则可能发生这种情况(使用Windows时)的另一种情况。 映射驱动器号并在映射的驱动器号上运行也解决了这个问题。

答案 4 :(得分:1)

我和你有同样的问题,这就是解决方案。 ImageMagick在终端/控制台中正常工作,但在nodejs(gm模块)中没有。 失去头发2天后,我通过将PATH变量添加到环境变量process.env.PATH来修复它 应该有imagemagick和其他可执行文件的路径。 Node.js有一些来自系统的PATH但是对于某些人而言,GM忽略它并使用process.env.PATH

我创建了环境变量PATH(process.env.PATH)并将值设置为 斌:node_modules / .bin文件:在/ usr / local / bin目录:在/ usr / bin中:/ bin中 我正在使用MAC OS X

我使用brew(brew install imagemagick

安装了imageMagick

答案 5 :(得分:0)

因为我在stackoverflow上多次发现此问题,所以我想分享这个答案:https://stackoverflow.com/a/25461564/3970623

"产生ENOENT"似乎是由使用PATH环境变量访问的有效unix工具安装引起的。

答案 6 :(得分:0)

就我而言,这很简单。在Windows 10中安装GraphicsMagick之后,它出现了严格的问题: 在安装GraphicsMagick之前,我尝试使用尚未打开的控制台。因此它使用旧的路径信息,但没有找到GraphicsMagick。解决方案:我必须打开一个新的控制台来运行节点以使用gm。

答案 7 :(得分:0)

/gm/lib/command.js有一个选项,您可以在其中设置appPath,如果gm已经通过终端工作,您可以获取gm的路径并通过subClass函数传递它,在我的情况下gm是安装在/ usr / local / bin /中使用BrewOs on MacOsx。

var gm = require('gm').subClass({ appPath: "/usr/local/bin/" });

答案 8 :(得分:0)

以防万一有人在macOS上发现此错误,这对我有用:

$ brew install graphicsmagick