Socket.io began to support binary stream from 1.0, is there a complete example especially for image

后端 未结 3 804
伪装坚强ぢ
伪装坚强ぢ 2020-12-13 05:03

I\'m a beginner on node.js and socket.io. Socket.io began to support binary stream from 1.0, is there a complete example especially for image push to client and show in canv

3条回答
  •  天涯浪人
    2020-12-13 05:50

    The solution is a bit complicated but should work in Chrome, Firefox, and IE10+ (not sure about Opera and Safari):

    Somewhere on the server-side:

    io.on('connection', function(socket){
        fs.readFile('/path/to/image.png', function(err, buffer){
            socket.emit('image', { buffer: buffer });
        });
    });
    

    And here is how you handle it on a client:

    socket.on('image', function(data) {
        var uint8Arr = new Uint8Array(data.buffer);
        var binary = '';
        for (var i = 0; i < uint8Arr.length; i++) {
            binary += String.fromCharCode(uint8Arr[i]);
        }
        var base64String = window.btoa(binary);
    
        var img = new Image();
        img.onload = function() {
            var canvas = document.getElementById('yourCanvasId');
            var ctx = canvas.getContext('2d');
            var x = 0, y = 0;
            ctx.drawImage(this, x, y);
        }
        img.src = 'data:image/png;base64,' + base64String;
    });
    

    Just replace yourCanvasId with your canvas id :)

提交回复
热议问题