2013-08-27 32 views
13

如何用GM Node.js做'gm composite -gravity center change_image_url base_image_url'?如何使用gm node.js進行組合?

如何調用gm().command() & gm().in()gm().out()要達到上述目的?

+0

是你能弄清楚如何在URL中傳遞得到複合的工作? 我在讀你只能通過文件路徑。 – NateW

回答

3

我這樣做是這樣的:

var exec = require('child_process').exec 
var command = [ 
     '-composite', 
     '-watermark', '20x50', 
     '-gravity', 'center', 
     '-quality', 100, 
     'images/watermark.png', 
     'images/input.jpg', //input 
     'images/watermarked.png' //output 
     ]; 
     // making watermark through exec - child_process 
     exec(command.join(' '), function(err, stdout, stderr) { 
      if (err) console.log(err); 

     }); 
+2

作爲gm的主動維護者,我建議你這樣做......因爲gm幾乎沒有必要。唯一的區別是我會使用'execFile'而不是'exec'。 –

+0

另外,請確保命令以'gm composite' –

+2

開頭,在這個例子中甚至使用了gm?... @你可以告訴Jonathan更多在哪裏使用gm。像這樣'exec('gm composite'+ command.join('')..' –

11

安裝克,(確保你已經安裝實:graphicsmagick

npm install gm 

下面是我的示例代碼合併兩個圖像一起(使用gm.in

var gm = require('gm'); 

gm() 
.in('-page', '+0+0') 
.in('bg.jpg') 
.in('-page', '+10+20') // location of smallIcon.jpg is x,y -> 10, 20 
.in('smallIcon.jpg') 
.mosaic() 
.write('tesOutput.jpg', function (err) { 
    if (err) console.log(err); 
}); 
15

掙扎了一個小時後,這裏是我的解決方案爲您的問題:

gm composite -gravity center change_image_url base_image_url 

gm() 
.command("composite") 
.in("-gravity", "center") 
.in(change_image_url) 
.in(base_image_url) 
.write(output_file, function (err) { 
    if (!err) 
    console.log(' hooray! '); 
    else 
    console.log(err); 
}); 

祝你好運!希望它會對其他人有所幫助:)

+0

增加一個url實際上對你有用嗎? 它對我來說是一個文件路徑 – NateW

+0

你好,你在哪裏學習它? 'gm'文件不是教導性的。 – Jonathan

0

因爲暫時只限於Windows機器,所以我最終根本不使用「gm」模塊來解決這個問題。出於某種原因,即使我已經通過它的安裝程序安裝了圖形magick,節點模塊拒絕在我的環境變量中找到它。但這可能與我嘗試使用Electron.js(與Node.js類似,但具有「陷阱」)進行應用的事實有關。

var exec = require("child_process").execSync; 
var commandArray = [ 
    __dirname + "/bin/graphicsMagick/gm.exe", // the relative path to the graphics-magick executable 
    "-composite", 
    "-gravity", 
    "center", 
    __dirname + "/data/images/qr/logo-small.png", // relative paths to the images you want to composite 
    __dirname + "/data/images/qr/qr-webpage.png", 
    __dirname + "/data/images/qr/qr-webpage-logo.png" // relative path to the result 
]; 
var returnValue = exec(commandArray.join(" ")); 

對於windows,我認爲這是正確的便攜方式。

1

爲什麼沒有人使用composite命令? (https://github.com/aheckmann/gm

var gm = require('gm'); 
var bgImage = 'bg.jpg', 
    frontImage = 'front.jpg', 
    resultImage = 'result.jpg', 
    xy = '+100+150'; 

gm(bgImage) 
    .composite(frontImage) 
    .geometry(xy) 
    .write(resultImage, function (err) { 
    if (!err) console.log('All done'); 
    }); 

UPDATE哦,我看了這部法源的歷史。它僅在2014年

1

如果你想調整合併可用時,您可以使用此:

gm() 
.in('-geometry', '+0+0') 
.in('./img/img1.png') 
.in('-geometry', '300x300+100+200') 
.in('./img/img2.png') 
.flatten() 
.write('resultGM.png', function (err) { 
    if (err) console.log(err); 
});