2017-04-19 5 views
0

キャンバスに画像をアップロードできるノードとソケットを使用して共同アプリケーションを作成しています。接続されたユーザーの1人が画像をアップロードすると、その画像をすべての接続済みのユーザーに描画させるにはどうすればよいですか?アップロードした画像を複数のユーザーの間でキャンバスに共有

これは私が試したものです:あなたが発するとき

クライアント

socket.on('img', 
     function() { 
     console.log("Image uploaded"); 
     ctx.drawImage(img, 105, 50); 
     } 
    ); 

function el(id){return document.getElementById(id);} 
    function readImage() { 
     if (this.files && this.files[0]) { 
      var FR= new FileReader(); 
      FR.onload = function(e) { 
       var img = new Image(); 
       img.onload = function() { 
        var image = ctx.drawImage(img, 105, 50); 
        console.log("sendimg: "); 
        socket.emit('img'); 
       }; 
       img.src = e.target.result; 
      };  
      FR.readAsDataURL(this.files[0]); 
     } 
    } 
    el("fileUpload").addEventListener("change", readImage, false); 

サーバー

socket.on('img', 
     function() { 
     console.log("Image Uploaded"); 
     socket.broadcast.emit('img'); 
     } 
    ); 
+0

あなたは「イメージに関するメッセージを送信していますされていますイメージ自体を送信しないでください... – jcaron

+0

私は何を変更する必要がありますか? – Pedro

+0

イメージを何とか送信してください... – jcaron

答えて

1

は、あなたにも沿って画像データを送信する必要があります。あなたはそのデータのURLにsrc設定して画像を追加することができます

img.onload = function() { 
    var image = ctx.drawImage(img, 105, 50); 
    console.log("sendimg: "); 
    socket.emit('img', ctx.toDataURL()); 
}; 

:たとえば、画像のbase64でエンコードされたバージョンを送信することができます。 Different image formats are available if you prefer

あなたは、パラメータを処理するために、あなたのクライアントをアップデートする必要があります。

socket.on('img', function(dataURL) { 
    console.log("Image uploaded"); 
    var img = new Image; 
    img.onload = function(){ 
     ctx.drawImage(img, 105, 50); 
    }; 
    img.src = dataURL; 

}); 

と一緒にそれを渡すために、サーバー:

socket.on('img', function(dataURL) { 
    console.log("Image Uploaded"); 
    socket.broadcast.emit('img', dataURL); 
}); 
+0

あなたの答えをありがとう、あなたの例のようにデータURLを追加しました。あなたは 'img.src = e.target.result;'に別のものを追加する必要がありますか? – Pedro

+0

問題ありません。イメージのローカルコピーであるため、変更する必要はありません。これは 'e.target.result'でも動作するはずです –

+0

セットアップで間違っている可能性がある他にも多くのことがありますが、私の答えは投稿したコードに基づいて表示されます。私は創始者、サーバー、および受信クライアントにdataURLを記録し、誰もがURLを参照していることを確認することをお勧めします。そこから、正しくレンダリングされない理由はデバッグの問題です。 –

関連する問題