34

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

                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)

我的文件结构如下:

在此处输入图像描述

代码在postnewsitem.js文件中执行

为什么会发生此错误以及如何解决?

编辑:GraphicsMagick 作品,证明:

在此处输入图像描述

4

10 回答 10

67

安装 ImageMagick 并使用子类 imageMagick。

  1. 安装 ImageMagick

    sudo apt-get install imagemagick
    
  2. 使用子类 imagemagick:

    var gm = require('gm').subClass({ imageMagick: true });
    
于 2013-10-08T15:44:41.060 回答
10

我在安装了 gm 和 imagemagick 的 Windows 7 上运行 nodejs,似乎两个模块之间存在冲突,所以我用谷歌搜索了一下,发现了如何避免这种情况。我添加了这一行,解决了我的 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 });
于 2013-08-27T10:30:59.537 回答
4

使用 IIS 在 Windows 上运行的 Node.js 应用程序有同样的问题。当我将相应 AppPool 的“高级设置”中的“加载用户配置文件”选项设置为“ True ”时,问题已经消失

于 2014-02-21T17:52:53.283 回答
2

我遇到了同样的问题并以给定的方式解决了它。

var gm = require('gm'); 

gm('public/uploads/1710410635.jpg').options({imageMagick: true}).resize(240,240).write('public/uploads/1710410635.jpg', function (err) {
if (!err) console.log('Done');
else console.log(err);
})

注意:如果你还没有安装 imageMagick。请先安装那个

于 2015-09-10T10:54:58.860 回答
1

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

于 2013-06-28T08:23:27.630 回答
1

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

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

我用 brew ( brew install imagemagick)安装了 imageMagick

于 2015-03-06T21:01:07.590 回答
0

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

“spawn ENOENT”似乎是由有效的 unix 工具安装引起的,可以使用 PATH 环境变量访问。

于 2014-08-23T11:51:23.477 回答
0

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

$ brew install graphicsmagick
于 2019-02-11T22:29:21.357 回答
0

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

于 2016-02-15T15:29:22.477 回答
0

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

var gm = require('gm').subClass({ appPath: "/usr/local/bin/" });
于 2016-07-09T11:36:27.293 回答