Express js 多重操作 gm (GraphicsMagick) 模块
Express js multiple operations gm (GraphicsMagick) module
将 Expressjs 与 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;
经过一段时间的努力,我发现 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
});
});
将 Expressjs 与 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;
经过一段时间的努力,我发现 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
});
});