上下文:我正在創建一個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