【问题标题】:nodejs: convert pngjs stream to base64nodejs:将 pngjs 流转换为 base64
【发布时间】:2014-02-27 22:24:12
【问题描述】:

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

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

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

我怎样才能做到这一点?

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

谢谢!

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    这是我为未来的读者所做的 (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'));   
        });
    

    【讨论】:

    • 值得一提的是,如果您专门处理图像,使用字符串连接而不是推送块会给您带来奇怪的结果。谢谢!
    【解决方案2】:

    您不想将流转换为字符串,而是将其转换为可读块:

    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 拖放上传的图像)的外观感兴趣,您可以查看 messenger

    【讨论】:

      猜你喜欢
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 2017-07-02
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多