2016-06-09 25 views
2

使用Expressjs與gm(GraphicsMagick)模塊。Express js多個操作gm(GraphicsMagick)模塊

目前(請參閱代碼)操作#1和#2在單獨執行時正常工作,但它們不能一起工作(如下所示)。

我想在一個聲明中結合這兩個操作,有什麼建議嗎?

var express = require('express'); 
var router = express.Router(); 
var gm = require('gm'); // GraphicsMagick 

router.get('/', function(req, res) { 

    gm('image.png') 
     // Operation #1 
     .composite('topimage.png') 
     .geometry('+200+200') 

     // Operation #2 
     .drawText(5, 20, 'my text') 
     .fontSize(20) 
     .font(__dirname + 'fonts/MyFont.TTF') 

     .stream(function streamOut (err, stdout, stderr) { 
      stdout.pipe(res); //pipe to response 
     }); 

}); 

module.exports = router; 

回答

2

經過一段時間的爭論,我發現gm()可以將Stream作爲輸入參數。以下代碼解決了我的問題。

var express = require('express'); 
var router = express.Router(); 
var gm = require('gm'); // GraphicsMagick 

router.get('/', function(req, res) { 

    gm(gm('image.png') 
       // Operation #1 
      .composite('topimage.png') 
      .geometry('+200+200') 
      .stream()) 

       // Operation #2 
      .drawText(5, 20, 'my text') 
      .fontSize(20) 
      .font(__dirname + 'fonts/MyFont.TTF') 

      .stream(function streamOut (err, stdout, stderr) { 
       stdout.pipe(res); //pipe to response 
      }); 

    });