2012-09-17 3 views
1

다음 코드는 오류를 발생시킵니다.노드 gm - 잘라 내기 및 크기 조정 원인 오류 사용

Error: Command failed: gm convert: geometry does not contain image (unable to crop image).

var gm = require('gm'); 

gm('/origin.jpg') 
.resize(600) 
.write('/beforeCrop', function (err) { 
    // beforeCrop is 600 * 450 
    gm('/beforeCrop') 
    .crop(70, 70, 100, 100) 
    .resize(50, 50) 
    .write('/result', function (err) { 
     if (err) throw err; 
    }); 
}); 

는 GM이 의 크기 beforeCrop를 해결할 수 있다는 것입니다.

답변

0

시스템의 루트 디렉토리에서 읽고 쓰는 것 같습니다. 루트/관리자 권한으로 실행하지 않는 한 권한을 갖고 있지 않습니다. 그렇다면 거대한 보안 구멍을 열어 둡니다.

+0

나는 단순화하기 위해 /를 사용했습니다. –

+0

첫 번째'.write'와 같이 발생할 수있는 오류 상황에 어떻게 반응하는지, 그리고 콘솔의 어떤 단계에서 에러가 발생했는지를 설명하는'console.log()'를 사용하면 (비동기 코드에서) , 단순한 스택 추적은 당신에게 그것을 말하지 않을 것입니다)? – ebohlman

+0

원래 이미지의 확장자를 유지하면 작동하는 것 같습니다. 내 닫힌 [github의 문제] (https://github.com/aheckmann/gm/issues/78#issuecomment-8640636)를 참조하십시오. –

4

스트림으로 파이핑하고 즉시 스트림에서 읽지 않는 이유는 무엇입니까?

var gm = require('gm'); 

gm('/origin.jpg') 
.resize(600) 
.stream(function (err,stdout,stderr) { 
    // beforeCrop is 600 * 450 
    gm(stdout) // gm can read buffers ;) 
    .crop(70, 70, 100, 100) 
    .resize(50, 50) 
    .write('/result', function (err) { 
     if (err) throw err; 
    }); 
}); 

나는 또한과 같이 자르기 후 다른 스트림에 배관을 생각 하는데요 : 같은 체인에 모두를 할 때

var gm = require('gm'); 

gm('/origin.jpg') 
.resize(600) 
.stream(function (err,stdout,stderr) { 
    // beforeCrop is 600 * 450 
    gm(stdout) // gm can read buffers ;) 
    .crop(70, 70, 100, 100).stream(function (err,stdout,stderr) { 
     gm(stdout).resize(50, 50) 
     .write('/result', function (err) { 
      if (err) throw err; 
     }); 
    }); 
}); 

내가 몇 가지 문제가 있었다.