nodejs:将pngjs流转换为base64

时间:2014-02-27 22:24:12

标签: node.js socket.io

我有一个PNG对象,我使用node-png创建,根据文档,它是“readable and writable Stream”。

我想将PNG对象转换为base64并通过socket.io将其发送到客户端,我将字符串放在图像src中。

我尝试了很多东西,但似乎将流转换为字符串并非易事。

我怎样才能做到这一点?

请注意,数据是在节点内创建的,而不是从文件系统创建的。

谢谢!

2 个答案:

答案 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