2013-08-27 5 views
13

Wie 'GM Composite-Gravitationszentrum change_image_url base_image_url' mit GM Node.js?Wie wird Composite mit gm node.js gemacht?

Wie Aufruf gm().command() & gm().in() oder gm().out() die oben zu erreichen?

+0

Konnten Sie herauszufinden, wie in Urls passieren arbeiten lassen Composite? Ich lese Sie konnten nur Dateipfade übergeben. – NateW

Antwort

3

ich, dass diese Art und Weise tue:

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

als der aktive Betreuer von gm, ich schlage vor, Sie tun es auf diese Weise ... weil GM so ziemlich unnötig ist. Der einzige Unterschied ist, dass ich execFile anstelle von exec verwenden würde. –

+0

auch, stellen Sie sicher, der Befehl beginnt mit 'gm composite' –

+2

in diesem Beispiel, wo gm ist sogar verwendet? ... @ Jonathan könnten Sie mehr sagen, wo gm zu verwenden. wie das 'exec ('gm composite' + command.join ('') ..' –

11

gm installieren, (stellen Sie sicher, dass Sie bereits graphicsmagick

npm install gm 

folgende ist mein Beispielcode zusammen zu fusionieren zwei Bilder installieren (verwenden 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

Nach dem Kampf für eine Stunde, hier ist meine Lösung für Ihre Frage:

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

Viel Glück! Hoffe, es wird auch für andere hilfreich sein :)

+0

Funktioniert das Hinzufügen einer URL tatsächlich für Sie? Alles, was es für mich akzeptiert, ist ein Dateipfad. – NateW

+0

Hallo, wo lernst du es? Die 'gm' Dokumente sind nicht didaktisch. – Jonathan

0

Nachdem ich das Vergnügen hatte, für den Moment auf eine Windows-Maschine beschränkt zu sein, löste ich dieses Problem, indem ich das "gm" -Modul überhaupt nicht verwendete. Aus irgendeinem Grund, obwohl ich Grafik-Magie über seinen Installer installiert habe, weigerte sich das Knotenmodul, es in meinen Umgebungsvariablen zu finden. Aber das könnte etwas damit zu tun haben, dass ich versuche, eine Anwendung mit Electron.js zu erstellen (die ähnlich zu Node.js ist, aber ihre "Gotcha's" hat).

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

Für Windows denke ich, das ist die richtige tragbare Möglichkeit, es zu tun.

1

Warum verwendet niemand composite Befehl? (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 Oh, sah ich Geschichte der Quelle dieser Methode. Es verfügbar wird nur auf 2014

1

Wenn Sie und merge, um die Größe, können Sie diese verwenden:

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