Ответ 1
Установите ImageMagick и используйте subClass imageMagick.
-
Установить ImageMagick
sudo apt-get install imagemagick
-
с помощью subclass imagemagick:
var gm = require('gm').subClass({ imageMagick: true });
Когда я пытаюсь изменить размер изображения следующим образом:
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
почему возникает эта ошибка и как ее решить?
edit: GraphicsMagick работает, доказательство:
Установите ImageMagick и используйте subClass imageMagick.
Установить ImageMagick
sudo apt-get install imagemagick
с помощью subclass imagemagick:
var gm = require('gm').subClass({ imageMagick: true });
Я запускаю nodejs в Windows 7 с установленными gm и imagemagick, и кажется, что между обоими модулями был конфликт, поэтому я немного искал язык и узнал, как его избежать. Я добавил эту строку и решил мою проблему 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 });
Имела ту же проблему с приложением Node.js, запущенным в Windows с использованием IIS. Проблема исчезла, когда я установил параметр Загрузить профиль пользователя в " Дополнительные параметры" соответствующего AppPool для " True"
Я столкнулся с той же проблемой и решил ее таким образом.
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. Пожалуйста, установите этот первый
Другой сценарий, когда это может произойти (при использовании окон), - это попытка запустить код из UNC-пути. сопоставление букв диска и работа над сопоставленной буквой диска также решает эту проблему.
У меня такая же проблема, как и вы, и это было РЕШЕНИЕ. ImageMagick корректно работал в терминале/консоли, но не в nodejs (модуль gm). Через 2 дня потери волос я исправил его, добавив переменную PATH в переменные среды process.env.PATH Должен быть путь к вашему imagemagick и другим исполняемым файлам. Node.js имеет некоторую PATH из системы, но для некоторого reasone GM игнорирует его и использует process.env.PATH
Я создал переменную среды PATH (process.env.PATH) и установил значение для бен:. node_modules/бен:/USR/локальные/бен:/USR/бен:/бен Я использую MAC OS X
У меня установлен imageMagick с brew (brew install imagemagick
)
Поскольку я много раз обнаружил эту проблему в stackoverflow, я хочу поделиться этим ответом: fooobar.com/questions/155879/...
"Инициатор ENOENT", по-видимому, вызван действительной установкой инструментов unix, доступной с использованием переменной среды PATH.
В моем случае это было очень просто. Это стало возможным после установки GraphicsMagick в Windows 10: Я попытался использовать консоль, которая еще была открыта перед установкой GraphicsMagick. Поэтому он использовал информацию старого пути и не нашел GraphicsMagick. Решение. Мне пришлось открыть новую консоль для запуска node для использования gm.
/gm/lib/command.js есть опция, где вы можете установить appPath, если gm уже работает через терминал, вы можете получить путь к gm и передать его через функцию subClass. В моем случае gm был установлен в/usr/local/bin/с помощью brew на MacOsx.
var gm = require('gm').subClass({ appPath: "/usr/local/bin/" });