编辑:解决方案是使用
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`
答案 0 :(得分:3)
您可以通过API使用图像的pointer
(缓冲区)。
res.set('Content-Type', 'image/png');
res.send( img.pngPtr() );
中详细了解这些功能
答案 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);