Quand j'essaye de redimensionner une image comme ceci:
gm('public/uploads/1710410635.jpg')
.resize(240, 240)
.noProfile()
.write('public/uploads/1710410635_t.jpg', function (err) {
if (!err) console.log('done');
});
Je reçois cette erreur:
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)
Ma structure de fichier est la suivante:
Le code est exécuté dans le fichier postnewsitem.js
pourquoi cette erreur se produit-elle et comment la résoudre?
edit: GraphicsMagick fonctionne, preuve:
Installez ImageMagick et utilisez la sous-classe imageMagick.
Installer ImageMagick
Sudo apt-get install imagemagick
en utilisant subClass imagemagick:
var gm = require('gm').subClass({ imageMagick: true });
Je suis en train de lancer nodejs sur Windows 7 avec gm et imagemagick installés et il semble y avoir un conflit entre les deux modules. J'ai ajouté cette ligne et cela a résolu mon problème avec ENOENT: var imageMagick = gm.subClass({ imageMagick: true });
so le code ressemble maintenant à ceci:
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);
})
OU vous pouvez le faire lorsque vous avez besoin de GM, comme ceci:
var gm = require('gm').subClass({ imageMagick: true });
Avait le même problème avec l'application Node.js s'exécutant sur Windows en utilisant IIS. Le problème a disparu lorsque j'ai défini l'option " Charger le profil utilisateur " dans " Paramètres avancés " de l'AppPool approprié sur " True "
J'ai fait face au même problème et l'ai résolu de la manière indiquée.
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);
})
Remarque: Si vous n'avez pas encore installé imageMagick. S'il vous plaît installer ce premier
J'ai le même problème que vous et c'était SOLUTION. ImageMagick fonctionnait correctement dans le terminal/la console, mais pas dans nodejs (module gm) . Après deux jours de perte de cheveux, je l'ai corrigé en ajoutant une variable PATH aux variables d'environnement process.env.PATH chemin vers votre imagemagick et d’autres exécutables . Node.js a un chemin PATH du système mais pour certaines raisons, GM l’ignore et utilise process.env.PATH.
J'ai créé la variable d'environnement PATH (process.env.PATH) et défini la valeur sur Bin: modules_noeud/.bin:/usr/local/bin:/usr/bin:/bin J'utilise MAC OS X
J'ai installé imageMagick avec brew (brew install imagemagick
)
Si vous essayez d'exécuter votre code à partir d'un chemin UNC ., Le mappage d'une lettre de lecteur et son exécution sur la lettre de lecteur mappée permettent également de résoudre ce problème (lorsque Windows est utilisé).
Juste au cas où quelqu'un trouverait cette erreur sur macOS, cela a fonctionné pour moi:
$ brew install graphicsmagick
Dans mon cas, c'était très simple. Cela s'est produit juste après l’installation de GraphicsMagick dans Windows 10: J’ai essayé d’utiliser une console encore ouverte avant d’installer GraphicsMagick. Par conséquent, il utilisait les anciennes informations de chemin et n’a pas trouvé GraphicsMagick. Solution: J'ai dû ouvrir une nouvelle console pour exécuter le nœud d'utilisation de gm.
Parce que j'ai trouvé ce problème plusieurs fois ici sur stackoverflow, je souhaite partager cette réponse: https://stackoverflow.com/a/25461564/3970623
"Spawn ENOENT" semble être dû à une installation valide des outils Unix accessible à l'aide de la variable d'environnement PATH.
/gm/lib/command.js propose une option permettant de définir le chemin d'application. Si gm fonctionne déjà via le terminal, vous pouvez obtenir le chemin d'accès à gm et le transmettre via la fonction subClass. Dans mon cas, gm a été installé dans/usr/local/bin/using brew sur MacOsx.
var gm = require('gm').subClass({ appPath: "/usr/local/bin/" });