NodeJS:使用node-canvas生成的png如何提供服务

10

我想使用node-canvas生成并提供一个.png文件。至今为止,我已经使用Express完成了以下工作:

draw_badge.js

function draw() {
  var Canvas = require('canvas'),
      Image = Canvas.Image,
      canvas = new Canvas(200, 200),
      ctx = canvas.getContext('2d');

  ctx.font = '30px Impact';
  ctx.rotate(0.1);
  ctx.fillText('Awesome!', 50, 100);

  return canvas;
}

module.exports = draw;

badge.js

var express = require('express');
var router = express.Router();
var draw = require('../lib/draw_badge.js');

router.get('/show', function (req, res, next) {
  res.setHeader('Content-Type', 'image/png');
  res.end(draw());
});

module.exports = router;

但是当我在浏览器中打开路径时,却没有看到任何png。我对Node的掌握还不够牢固,无法理解发生了什么事情。有人能指点我正确的方向吗?

1个回答

20

尝试在 badge.js 中使用以下内容:

var express = require('express');
var router = express.Router();
var draw = require('../lib/draw_badge.js');

router.get('/show', function (req, res, next) {
  res.setHeader('Content-Type', 'image/png');
  draw().pngStream().pipe(res);
});

module.exports = router;

注意这行代码 draw().pngStream().pipe(res);

它将从你的Canvas获取一个PNG流,并将该流传输到响应流中。通过这种方式,你不需要调用res.end(),因为当你的PNG流结束时,响应流也将结束。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接