我有一个PNG对象,我使用node-png创建,根据文档,它是“readable and writable Stream”。
我想将PNG对象转换为base64并通过socket.io将其发送到客户端,我将字符串放在图像src中。
我尝试了很多东西,但似乎将流转换为字符串并非易事。
我怎样才能做到这一点?
请注意,数据是在节点内创建的,而不是从文件系统创建的。
谢谢!
答案 0 :(得分:17)
感谢您的帮助。这就是我为未来读者所做的事情(this helped too):
png.pack();
var chunks = [];
png.on('data', function(chunk) {
chunks.push(chunk);
console.log('chunk:', chunk.length);
});
png.on('end', function() {
var result = Buffer.concat(chunks);
console.log('final result:', result.length);
io.sockets.emit('image', result.toString('base64'));
});
答案 1 :(得分:1)
您不希望将流转换为字符串,而是将其转换为可读块:
stream.on('readable', function() {
var string = stream.read().toString('base64');
// send through websocket
});
您也可以对通过流运行的完整数据执行此操作:
var data = '';
stream.on('readable', function() {
data += stream.read().toString('base64');
});
stream.on('end', function() {
console.log(data);
});
取决于客户是否需要完整的png图片,或者是否可以使用单个块。
但是,如果您对实际示例中的情况感兴趣(图片由HTML5 Drag& Drop上传),您可以结帐messenger。