Erreur: générer ENOENT lors de l’utilisation de GM dans le noeud

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:

entrez la description de l'image ici

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:

entrez la description de l'image ici

Installez ImageMagick et utilisez la sous-classe imageMagick.

  1. Installer ImageMagick

     sudo apt-get install imagemagick 
  2. 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, alors j’ai googlé un peu et découvert comment éviter cela. J’ai ajouté cette ligne et cela a résolu mon problème ENOENT: var imageMagick = gm.subClass({ imageMagick: true }); 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 installé imageMagick. S’il vous plaît installer ce premier

Si vous essayez d’exécuter votre code à partir d’un chemin UNC, cela pourrait également se produire (lors de l’utilisation de Windows). le mappage d’une lettre de lecteur et l’exécution sur la lettre de lecteur mappé résolvent également ce problème.

J’ai le même problème que vous et c’était SOLUTION. ImageMagick fonctionnait correctement dans le terminal / la console, mais pas dans le noeud nodejs (module gm). Après 2 jours de perte de cheveux, je l’ai corrigé en ajoutant une variable PATH aux variables d’environnement process.env.PATH Il devrait y avoir un chemin d’access à votre imagemagick et à d’autres exécutables. Node.js a un 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 bin: modules_noeud / .bin: / usr / local / bin: / usr / bin: / bin J’utilise MAC OS X

J’ai installé imageMagick avec infusion ( brew install imagemagick )

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.

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 qui était encore ouverte avant d’installer GraphicsMagick. Par conséquent, il utilisait les anciennes informations de chemin et n’a pas trouvé GraphicsMagick. Solution: Je devais ouvrir une nouvelle console pour exécuter le nœud d’utilisation de GM.

/gm/lib/command.js possède une option permettant de définir le chemin d’application. Si gm fonctionne déjà via le terminal, vous pouvez obtenir le chemin d’access à gm et le transmettre via la fonction subClass. usr / local / bin / using brew sur MacOsx.

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