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

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

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作品,certificate:

在这里输入图像说明

安装ImageMagick并使用subClass imageMagick。

  1. 安装ImageMagick

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

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

我正在运行安装gm和imagemagick的Windows 7上的nodejs,似乎有两个模块之间的冲突,所以我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 }); 

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

我面临同样的问题,并以给定的方式解决它。

 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。 请先安装

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

我和你有同样的问题,这是解决scheme。 ImageMagick在terminal/控制台中正常工作,但不在nodejs(gm模块)中。 经过2天的头发损失,我通过添加PATHvariables来解决环境variablesprocess.env.PATH应该有你的imagemagick和其他可执行文件的path。 Node.js有一些来自系统的PATH,但是对于某些reasone,GM忽略了它并使用了process.env.PATH

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

我用brew安装了imageMagick( brew install imagemagick

因为我在这里find这个问题很多次在stackoverflow,我想分享这个答案: https : //stackoverflow.com/a/25461564/3970623

“spawn ENOENT”似乎是由可通过PATH环境variables访问的有效的unix工具安装引起的。

就我而言,这非常简单。 它在Windows 10中安装GraphicsMagick后发生了很大的变化:我尝试使用在安装GraphicsMagick之前打开的控制台。 因此它使用旧的path信息,并没有findGraphicsMagick。 解决scheme:我必须打开一个新的控制台来运行使用gm的节点。

/gm/lib/command.js有一个选项,你可以设置appPath,如果gm已经在通过terminal工作,你可以得到gm的path并通过subClass函数传递,在我的情况下,gm被安装在/ usr / local / bin /在MacOsx上使用brew。

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