上下文:我正在创建一个Web应用程序,我可以在画布上绘画,将其保存为图像,并通过节点将其发送给另一个客户端。如何通过节点js发送div?
什么工作:(无论是客户端上它是实时更新)
- 绘图。
- 保存帆布作为Uint8Array
- 保存帆布作为IMG DIV W/base64编码图像
如果我坚持:
我似乎无法管道完成的图像给其他客户。我可以用各种方式保存画布,但不知道如何穿过画布。
如何,我将它发送到节点服务器作为一个div:
byId('sendHTML').onclick = SendImageHTML;
function SendImageHTML() {
var imageHTML = convertCanvasToImage(canvas);
socket.emit('SendImageHTML', imageHTML);
// EMITS: <img src="data:image/png;base64, iVB9023423523345346....."
}
发送的Uint8Array:
/**
* Converts canvas to bytes & emits web socket message
* @return {Uint8Array} Bytes from canvas
*/
byId('defImgBinary').onclick = DefineImageBinary;
function DefineImageBinary() {
var image = context.getImageData(0, 0, canvas.width, canvas.height);
var buffer = new ArrayBuffer(image.data.length);
var bytes = new Uint8Array(buffer);
for (var i=0; i<bytes.length; i++) {
bytes[i] = image.data[i];
}
socket.emit('defImgBinary', bytes);
// EMITS: [24, 24, 29, 255, 24, 24, 29, 255, 24, 24.......]
}
这里是我的服务器代码:
socket.on('SendImageHTML', function (html) {
console.log("SendImageHTML called: ");
log(html);
// RETURNS:
// SendImageHTML called:
// {}
});
socket.on('defImgBinary', function (bytes) {
log("defImgBinary called: ");
log(bytes);
// RETURNS:
// defImgBinary called:
// '53721': 220,
// '53722': 219,
// '53723': 255,
// '53724': 229,
});
我需要什么帮助:
我该怎么做它从那里?我如何在其他客户端上实际显示此图像?
只是'socket.broadcast.emit'数据从服务器。它会将它发送到[除了发送图像数据的所有连接的套接字上](http://socket.io/docs/#broadcasting-messages)。由于您发送的是''html,因此客户端可以将其添加到DOM,并且它将显示在下一个呈现中。 – nem035