将使用node-gd生成的图像发送到客户端

时间:2016-11-23 20:20:14

标签: node.js express image-processing

编辑:解决方案是使用

res.set('Content-Type', 'image/png');
res.end(data, 'binary').

我正在尝试使用node-gd动态生成图像。我的应用程序是node.js / express。

此代码成功生成图像:

    //create image
    var gd = require('node-gd');
    var img = gd.createSync(200, 80);
    img.colorAllocate(0, 255, 0);

    img.savePng('../test.png', 0, function(error) {
      if (error) throw error;
      img.destroy();
    })

但它将图像保存到文件中。我不一定要保留生成的图像,只需将其发送给客户端即可。

我希望我能做到

res.send(img);

但是这只会返回一个包含图像元数据的对象。

编辑: 尝试输出指针:

    //create image
    var gd = require('node-gd');
    var img = gd.createSync(200, 80);
    img.colorAllocate(0, 255, 0);

    var imageData = img.pngPtr();
    res.set('Content-Type', 'image/png');
    console.log(imageData);
    res.send(imageData);

在我的浏览器中,我得到:

无法显示图像“URLHERE”,因为它包含错误。

文件不是空的,它像138个字节,实际图像就像2kb。

如果我记录PNG数据(我没想到它可读,但仍然):

PNG

IHDRÈPf£¨óPLTEÿ4^À¨     pHYsÄÄ+IDATHc`£`Q0
FÁ( ½1üñIEND®B`

3 个答案:

答案 0 :(得分:3)

您可以通过API使用图像的pointer(缓冲区)。

res.set('Content-Type', 'image/png');
res.send( img.pngPtr() );

您可以在official documentation

中详细了解这些功能

答案 1 :(得分:1)

Express的res.sendFile方法适合您吗?

res.sendFile('/path/to/image.png')

答案 2 :(得分:0)

将其作为二进制文件发送:

res.write(buffer,'binary');
res.end(null, 'binary');

生成了imageptr()。

要生成二进制文件,请参阅此https://github.com/y-a-v-a/node-gd/blob/stable/docs/index.md#saving-graphic-images

我用过:

var jpgImageData = img.jpegPtr(0);