2013-08-27 19 views
13

Come fare 'gm composite -gravity center change_image_url base_image_url' con GM Node.js?Come eseguire il composito con gm node.js?

Come chiamare gm().command() & gm().in() o gm().out() per realizzare quanto sopra?

+0

sono stati in grado di capire come passare in URL per ottenere composito a lavorare? Sto leggendo che potresti passare solo nei percorsi dei file. – NateW

risposta

3

sto facendo che questo modo:

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

come manutentore attivo di gm, ti suggerisco di farlo in questo modo ... perché gm è praticamente inutile. l'unica differenza è che userò 'execFile' invece di' exec'. –

+0

inoltre, assicurati che il comando inizi con 'gm composite' –

+2

in questo esempio in cui gm è usato anche? ... @ Jonathan potresti dire di più su dove usare gm. come questo 'exec ('gm composite' + command.join ('') .. ' –

11

Installare gm, (assicuratevi già installato GraphicsMagick

npm install gm 

seguente è il mio codice di esempio di fondere immagine due insieme (utilizzare 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

Dopo aver lottato per un'ora, ecco la mia soluzione per la tua domanda:

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

Buona fortuna! Spero che possa essere d'aiuto anche agli altri :)

+0

L'aggiunta di un URL funziona davvero per te? Tutto quello che accetta per me è un percorso file. – NateW

+0

Ciao, dove lo impari? I documenti 'gm' non sono didattici. – Jonathan

0

Avere il piacere di essere confinato in una macchina Windows per il momento ho risolto questo problema eventualmente non utilizzando affatto il modulo "gm". Per qualche ragione, anche se ho installato graphics-magick tramite il suo programma di installazione, il modulo del nodo ha rifiutato di trovarlo nelle mie variabili di ambiente. Ma questo potrebbe avere qualcosa a che fare con il fatto che sto cercando di creare un'applicazione con Electron.js (che è simile a Node.js ma ha il suo "gotcha").

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

Per Windows penso che questo sia il modo corretto per farlo.

1

Perché nessuno utilizza il comando 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 Oh, ho guardato la storia della fonte di questo metodo. Sarà disponibile solo su 2014

1

Se si desidera ridimensionare e unione, è possibile utilizzare questo:

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