web-dev-qa-db-fra.com

Erreur: générer ENOENT lors de l'utilisation GM en 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:

enter image description here

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:

enter image description here

34
Olivier_s_j

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 });
    
65
Quỳnh Lê

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 });
11
Matiss Jurgelis

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 "

4
user2620800

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

2
Surya Purohit

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)

1
MiKlacko

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é).

1
epeleg

Juste au cas où quelqu'un trouverait cette erreur sur macOS, cela a fonctionné pour moi: 

$ brew install graphicsmagick
0
Chris Livdahl

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.

0
Gregor

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.

0
Maik Greubel

/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/" });
0
Naji Amer