このような画像のサイズを変更しようとすると:
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
ファイルで実行されます
このエラーが発生する理由と解決方法を教えてください。
編集:GraphicsMagickは動作し、証明:
ImageMagickをインストールし、subClass imageMagickを使用します。
ImageMagickをインストールする
Sudo apt-get install imagemagick
subClass imagemagickを使用:
var gm = require('gm').subClass({ imageMagick: true });
私は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 });
IISを使用してWindowsで実行されているNode.jsアプリケーションで同じ問題が発生しました。適切なAppPoolの「詳細設定」で「Load User Profile」オプションを「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をインストールしていない場合。最初にインストールしてください
私はあなたと同じ問題を抱えており、これが解決策でした。 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
)
これが発生する可能性がある別のシナリオ(Windowsを使用している場合)は、UNCパスからコードを実行しようとした場合です。ドライブ文字をマッピングし、マッピングされたドライブ文字で実行すると、この問題も解決します。
MacOS上で誰かがこのエラーを見つけた場合に備えて、これは私のために働いた:
$ brew install graphicsmagick
私の場合、それは非常に簡単でした。 Windows 10にGraphicsMagickをインストールした後、それは正しく発生しました。GraphicsMagickをインストールする前に、まだ開いているコンソールを使用してみました。したがって、古いパス情報を使用し、GraphicsMagickが見つかりませんでした。解決策:gmを使用するためにノードを実行するには、新しいコンソールを開く必要がありました。
私はこの問題をstackoverflowで何度も見つけたので、この答えを共有したい: https://stackoverflow.com/a/25461564/397062
「spawn ENOENT」は、PATH環境変数を使用してアクセスできる有効なUNIXツールのインストールが原因であると思われます。
/gm/lib/command.jsにはappPathを設定できるオプションがあります。gmがすでにターミナルで動作している場合、gmへのパスを取得してsubClass関数を介して渡すことができます。私の場合、gmは/ usr/local/bin/MacOsxでbrewを使用します。
var gm = require('gm').subClass({ appPath: "/usr/local/bin/" });