java - 通过 Tomcat Websocket 将图像缓冲为 JPG 到 HTML 5 Canvas

标签 java canvas websocket jpeg bufferedimage

嘿,我们想通过 tomcat websocket 定期将缓冲图像发送到 Canvas 中,类似于直播。

服务器代码:

private static void broadcastImage(BufferedImage img) {     
    StreamInbound someClient;
    byte[] arr = BufferedImageToByte(img);
    ListIterator<StreamInbound> iter = clients.listIterator();
    while (iter.hasNext()) {
        someClient = (MessageInbound) iter.next();
        try {
            someClient.getWsOutbound().writeBinaryMessage(ByteBuffer.wrap(arr));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public static byte[] BufferedImageToByte(BufferedImage img) {
    byte[] imageInBytes = null;
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(img, "jpg", baos);
        baos.flush();
        imageInBytes = baos.toByteArray();
        baos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return imageInBytes;
}

问题是如何将其打包到 Canvas 中。

客户端代码:

ws = new WebSocket("ws://"+ location.host + "/carduinowebdroid/websocket");
ws.binaryType = "arraybuffer";

/** stuff **/

ws.onmessage = function(message){
    if (message.data instanceof ArrayBuffer) {
        streamHandleMessage(message);
    }
}

function streamHandleMessage(message) {
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

/** what now? **/

}

非常感谢任何帮助!

最佳答案

你真的需要 webSocket 吗? 如果没有:

var can = document.getElementById('canvas');
var ctx = can.getContext('2d');
var img = new Image();
img.onload = function(){
    can.width = img.width;
    can.height = img.height;
    ctx.drawImage(img, 0, 0, img.width, img.height);
}
img.src = 'img.jpg';

否则看看这个: How can I create a canvas imageData array from an arrayBuffer representation of a JPG 或这个 http://www.adobe.com/devnet/html5/articles/real-time-data-exchange-in-html5-with-websockets.html

关于java - 通过 Tomcat Websocket 将图像缓冲为 JPG 到 HTML 5 Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17406441/

相关文章:

java - 如果服务器未运行,则终止 Spring Cloud 客户端

javascript - 删除在图像 Canvas HTML5 上绘制的彩色线条

javascript - HTML/javascript 客户端图像压缩看起来是一个合理且万无一失的计划吗?

http - 基于推送的api设计

Java:构建器模式、继承和泛型

java - Stream<java.lang.Byte> 无法使用常见的终端操作吗?

java - 如何在Eclipse Scout框架中设置不同的日志级别?

javascript - 是否可以更改 Canvas 的位置而不是重新绘制图片?

java - 通过 http 下载文件到同一主机时 Websocket 会阻塞

unit-testing - 如何用 jest 和 enzyme 测试 websocket?