2013-08-27 18 views
13

GM Node.js ile 'gm composite -gravity center change_image_url base_image_url' nasıl yapılır?Gm node.js ile bileşik nasıl yapılır?

Yukarıdakileri elde etmek için gm().command() & gm().in() veya gm().out()'u nasıl arayabilirim? ben bu şekilde olduğunu yapıyorum

+0

Eğer URL'lerin çalışmaya kompozit almak için geçmesi anlamaya edebildiniz mi? Okuyorum, sadece dosya yollarını geçebilirsiniz. Gm'nin aktif sürdürücü olarak – NateW

cevap

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

, bunu bu şekilde yapmanızı öneririm ... çünkü gm hemen hemen gereksizdir. Tek fark, 'exec' yerine 'execFile' kullanacağım. –

+0

Ayrıca, komutun gm'nin kullanıldığı bu örnekte 'gm kompozit' –

+2

ile başladığından emin olunuz mu? ... @ Jonathan, gm'yi nerede kullanacağınızı daha iyi söyler misiniz? exec ('gm kompozit' + command.join ('') .. ' –

11

gm yükleyin (zaten şu GraphicsMagick

npm install gm 

yüklemek emin olun birlikte iki görüntüyü birleştirmek için benim kod örneği (gm.in)

kullanmak
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

Bir saat boyunca mücadele ettikten sonra, işte sorunuz için çözümüm:

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); 
}); 

İyi şanslar! Umarım başkalarına da yardımcı olur umarım :)

+0

Aslında bir URL eklemek sizin için işe yarıyor mu? Benim için kabul ettiği tek şey bir dosya yoludur – NateW

+0

Merhaba, nereden öğreniyorsunuz? Gm dokümanları didaktik değildir. – Jonathan

0

Şu an için bir pencere makinesine hapsolmaktan zevk alarak, bu problemi "gm" modülünü hiç kullanmadan çözdüm. Bazı nedenlerden dolayı, yükleyici aracılığıyla grafik-magick kurmuş olsam da, düğüm modülü benim ortam değişkenlerimde bulmayı reddetti. Ancak bunun, Electron.js ile (Node.js'ye benzer, ancak "sahip olduğu" ") bir uygulama yapmaya çalıştığım gerçeğiyle ilgili bir şey olabilir.

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(" ")); 

Pencereler için bunu yapmanın doğru taşınabilir yolu olduğunu düşünüyorum.

1

Neden kimse composite komutunu kullanmıyor? (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'); 
    }); 

GÜNCELLEME Oh, bu yöntemin kaynağının tarihini izledi. Sadece

1

Eğer ve birleştirme boyutlandırmak istiyorsanız 2014 tarihinde kullanılabilir hale, bu kullanabilirsiniz:

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); 
}); 
İlgili konular