2014-02-27 82 views
5

我有一個PNG對象,我使用node-png創建,根據文檔它是「readable and writable Stream」。nodejs:將pngjs流轉換爲base64

我想將PNG對象轉換爲base64,並通過socket.io將其發送到客戶端,我將字符串放在圖像src中。

我已經嘗試了很多東西,但它似乎並不是微不足道的將一個流轉換爲字符串。

我該如何做到這一點?

請注意,數據是在節點內而不是從文件系統創建的。

謝謝!

回答

11

感謝您的幫助。在這裏我就是這樣做的未來的讀者(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

值得一提的是,使用字符串連接而不是推塊的給你奇怪的結果,如果你/圖像處理W¯¯明確。感謝你! –

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上傳圖像拖動&放下)您可以結算messenger