Java で実装された WebSocket サーバーがあります。クライアントが接続すると、クライアントがキャンバス要素で使用するために、この接続を介して画像を送信したいと考えています。次のサーバーコードを思いつきました:
public void onOpen(Connection connection) {
try {
BufferedImage image = ImageIO.read(new File("image.jpg"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos);
byte[] byteArray = baos.toByteArray();
connection.sendMessage(byteArray, 0, byteArray.length);
} catch (Exception e ){
System.out.println("Error: "+e.getMessage());
}
}
クライアント側の Javascript は次のようになります。
onmessage : function(m) {
if (m.data) {
if (m.data instanceof Blob) {
var blob = m.data;
var bytes = new Uint8Array(blob);
var image = context.createImageData(canvas.width, canvas.height);
for (var i=0; i<bytes.length; i++) {
image.data[i] = bytes[i];
}
}
}
}
接続は機能し、データは送信されますが (blob.size の値は正しい)、イメージはキャンバスに描画されません。Firefox で、「TypeError: 値を次のいずれかに変換できませんでした: HTMLImageElement、HTMLCanvasElement、HTMLVideoElement.」というエラー メッセージが表示されます。
この WebSocket の使用は、画像をクライアントに送信する最良の方法ではないという事実を認識しています。画像を送信した後、WebSocket はテキスト メッセージの送信にのみ使用されます。
画像を送信してキャンバスに適用するには、何を変更する必要がありますか?
使用したリソース: