当我尝试调整像这样的图像时:
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有效,证明:
答案 0 :(得分:65)
安装ImageMagick并使用subClass imageMagick。
安装ImageMagick
sudo apt-get install imagemagick
使用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
)
答案 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