2014-02-06 2 views
27

NodeJS의 gm 패키지를 사용하여 일부 축소판을 만들려고했지만 운이 좋지 않습니다. 600x600보다 큰 이미지의 크기를 조정해야합니다 (주어진 너비/높이부터 가능).하지만 gm에 크기를 전달하면 요청한 크기와 같은 이미지가 생성됩니다. ...이 코드 주어진 예를 들어이미지 크기 조정 및 자르기 및 종횡비 유지 NodeJS & gm

는, 나는 node app /path/to/image.png를 실행하는 나는에 200x100의 크기로 이미지를 받게됩니다 가정, 대신 나는, 말, 180x100 또는 200x90의 이미지를 가지고

gm(fileLocation) 
    .thumb(200, 100, 'processed.' + process.argv[2].split('.').pop(), function() { 
     console.log("Done!"); 
    }); 

나는 또한 resize 옵션을 시도했다.

gm('/path/to/image.jpg') 
    .resize(353, 257) 
    .write(writeStream, function (err) { 
     if (!err) console.log(' hooray! '); 
    }); 

답변

7

는 NodeJS에 대한 imagemagick 패키지와 함께 시도 ...이 크기를 강제 할 수있는 옵션도하지만 출력의 가로 세로 비율은 끔찍한 간다 : https://github.com/yourdeveloper/node-imagemagick

im.crop({ 
    srcPath: process.argv[2], 
    dstPath: 'cropped.' + process.argv[2].split('.').pop(), 
    width: 200, 
    height: 200, 
    quality: 1, 
    gravity: 'Center' 
}, function(err, stdout, stderr){ 
    if (err) throw err; 
    console.log('resized ' + process.argv[2].split('/').pop() + ' to fit within 200x200px'); 
}); 

업데이트 :node-imagemagick 패키지는 오랫동안 업데이트되지 않았습니다. 가장 최신 버전이므로 Freyday's answer을 고려하십시오. 이 패키지는 더 이상 당신이 사용했던 원래의 패키지를 추천 할 것입니다 지원 -

1) https://github.com/rsms/node-imagemagick

-2

두 가지 ....

2) 크기를 조정하지 않는 이유는 .resize 함수가 정수가 아닌 문자열을 사용한다는 것입니다. 그것은 당신이 유사한 무언가를 사용할 수 가 ('353', '257')

gm('/path/to/image.jpg') 
    .resize('353', '257') 
    .write(writeStream, function (err) { 
     if (!err) console.log(' hooray! '); 
    }); 
+3

'.resize'는 숫자와 잘 맞습니다. –

99

gm 모듈과 중앙 중력 이미지를 자른하는 크기를 조정할 달성하기 위해 ...해야한다 :

gm('/path/to/image.jpg') 
    .resize('200', '200', '^') 
    .gravity('Center') 
    .crop('200', '200') 
    .write(writeStream, function (err) { 
    if (!err) console.log(' hooray! '); 
    }); 

대신 기본 동작의 최소로 높이와 너비를 사용하는 GraphicsMagick을 말할 것이다 resize 기능에 '^' 인수, 최대. 크기가 조정 된 결과 이미지의 너비가 또는 높이가 지정된 치수가되고 부적합한 치수가 지정된 크기보다 커집니다.

그러면 gravity 함수는 GraphicsMagick에 다음과 같은 crop 함수가 어떻게 작용해야 하는지를 알려주며 이미지를 최종 크기로 자릅니다.

당신은 여기 gm 모듈에 의해 사용되는 GraphicsMagick 옵션에 대한 자세한 설명을 볼 수 있습니다 : http://www.graphicsmagick.org/GraphicsMagick.html

+13

이 답변은 받아 들여진 답변이어야합니다. – marksyzm

1

(ImageMagick를에 의한 경우를 제외) 외부 라이브러리없이 또 다른 해결책은 자신의 솔루션을 만들 수 있습니다 : 다음

var exec = require('child_process').exec; 

resize = function (image) { 
    var cmd = 'convert ' + image.src + 
    ' -resize ' + image.width + 'x' + image.height + '^' + 
    ' -gravity center -crop ' + image.width + 'x' + image.height + '+0+0 ' + 
    image.dst; 

    exec(cmd, function(error, stdout, stderr) { 
    if(error) { 
     console.log(error); 
    } 
    }); 
} 

과 전화 :

resize({ 
    src: sourceFile, 
    dst: destinyFile, 
    width: 320, 
    height: 240 
}); 

사용자 정의 매개 변수, 자르기 , 워터 마크 등 ...