【问题标题】:NodeJS: serve png generated by node-canvasNodeJS:服务由 node-canvas 生成的 png
【发布时间】:2015-12-07 16:02:58
【问题描述】:

我想使用 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.js canvas


    【解决方案1】:

    试试这个in 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 流结束时,您的响应流也将结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 2018-08-21
      • 2018-02-21
      • 2011-08-16
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多