web-dev-qa-db-ja.com

エラー:ノードでGMを使用中にENOENTを生成します

このような画像のサイズを変更しようとすると:

                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)

私のファイル構造は次のとおりです。

enter image description here

コードはpostnewsitem.jsファイルで実行されます

このエラーが発生する理由と解決方法を教えてください。

編集:GraphicsMagickは動作し、証明:

enter image description here

34
Olivier_s_j

ImageMagickをインストールし、subClass imageMagickを使用します。

  1. ImageMagickをインストールする

    Sudo apt-get install imagemagick
    
  2. subClass imagemagickを使用:

    var gm = require('gm').subClass({ imageMagick: true });
    
66
Quỳnh Lê

私はgmとimagemagickをインストールしたWindows 7でnodejsを実行していますが、両方のモジュール間に競合があるようですので、少しグーグルで調べてそれを回避する方法を見つけました。この行を追加して、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 });
11
Matiss Jurgelis

IISを使用してWindowsで実行されているNode.jsアプリケーションで同じ問題が発生しました。適切なAppPoolの「詳細設定」で「Load User Profile」オプションを「True」に設定すると問題が発生しました

4
user2620800

私は同じ問題に直面し、与えられた方法でそれを解決しました。

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をインストールしていない場合。最初にインストールしてください

2
Surya Purohit

私はあなたと同じ問題を抱えており、これが解決策でした。 ImageMagickは、ターミナル/コンソールでは正しく機能していましたが、nodejs(gmモジュール)では機能していませんでした。 2日間髪を失った後、環境変数process.env.PATHにPATH変数を追加することで修正しました。imagemagickおよびその他の実行可能ファイルへのパスが必要です。 Node.jsにはシステムからのPATHがありますが、何らかの理由でGMはそれを無視してprocess.env.PATHを使用しています

環境変数PATH(process.env.PATH)を作成し、値をbin:node_modules/.bin:/ usr/local/bin:/ usr/bin:/ binに設定しますMAC OS Xを使用しています

ImageMagickをbrew(brew install imagemagick

1
MiKlacko

これが発生する可能性がある別のシナリオ(Windowsを使用している場合)は、UNCパスからコードを実行しようとした場合です。ドライブ文字をマッピングし、マッピングされたドライブ文字で実行すると、この問題も解決します。

1
epeleg

MacOS上で誰かがこのエラーを見つけた場合に備えて、これは私のために働いた:

$ brew install graphicsmagick
0
Chris Livdahl

私の場合、それは非常に簡単でした。 Windows 10にGraphicsMagickをインストールした後、それは正しく発生しました。GraphicsMagickをインストールする前に、まだ開いているコンソールを使用してみました。したがって、古いパス情報を使用し、GraphicsMagickが見つかりませんでした。解決策:gmを使用するためにノードを実行するには、新しいコンソールを開く必要がありました。

0
Gregor

私はこの問題をstackoverflowで何度も見つけたので、この答えを共有したい: https://stackoverflow.com/a/25461564/397062

「spawn ENOENT」は、PATH環境変数を使用してアクセスできる有効なUNIXツールのインストールが原因であると思われます。

0
Maik Greubel

/gm/lib/command.jsにはappPathを設定できるオプションがあります。gmがすでにターミナルで動作している場合、gmへのパスを取得してsubClass関数を介して渡すことができます。私の場合、gmは/ usr/local/bin/MacOsxでbrewを使用します。

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