java - jetty websockets 发送二进制数据(图片)

标签 java javascript websocket jetty binary-data

我正在尝试使用 Jetty 8.1.2 WebSockets 将一些二进制数据(图像)发送到 javascript 客户端。

websockets java代码:

BufferedImage image = getTheImage();

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos);
baos.flush();
byte[] imageInBytes = baos.toByteArray();
baos.close();

socket.getConnection().sendMessage(imageInBytes, 0, imageInBytes.length);

javascript代码:

binarySocket.onmessage = function(event) {
if (event.data instanceof ArrayBuffer) {
    var bytearray = new Uint8Array(event.data);

    var tempcanvas = document.createElement('canvas');
    tempcanvas.height = imageheight;
    tempcanvas.width = imagewidth;
    var tempcontext = tempcanvas.getContext('2d');

    var imgdata = tempcontext.getImageData(0, 0, imagewidth,imageheight);
    var imgdatalen = imgdata.data.length;

    for ( var i = 8; i < imgdatalen; i++) {
        imgdata.data[i] = bytearray[i];
    }

    tempcontext.putImageData(imgdata, 0, 0);

    var img = document.createElement('img');
    img.height = imageheight;
    img.width = imagewidth;
    img.src = tempcanvas.toDataURL();
    chatdiv = document.getElementById('chatdiv');
    chatdiv.appendChild(img);
    chatdiv.innerHTML = chatdiv.innerHTML + "<br />";
}

};

如果我将图像写入磁盘,代码没有问题,但如果我尝试在 HTML 页面上显示图像,我会得到一些随机的彩色图像。 我可能以错误的方式对图像进行了编码。

知道如何将图像作为二进制数据发送并使用 javascript 显示吗?

最佳答案

你是对的。问题是图像编码。

替换:

img.src = tempcanvas.toDataURL();

img.src = tempcanvas.toDataURL("image/jpeg");

默认格式为 PNG。

关于java - jetty websockets 发送二进制数据(图片),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15488573/

相关文章:

javascript - 在 AngularJS 中查询后运行代码

java - WebSocket 在 Firefox 中建立两个连接

java - 查找两个字符第一次出现的位置

java - 使用数组调用方法时出现“.class”预期错误

java - 如何从 Maven 中的属性文件生成枚举?

Java通过Adobe RTMP LCDS DataService推送DataMessage

JavaScript 不会隐藏 asp.net 中的文本区域

javascript - 如何添加另一个#div :before 上已经存在的内容

java - 在 Java Swing 应用程序中实现 WebSocket

node.js - 如何在 Heroku 上获取我的 Node 应用程序的准确 Web 套接字 url