如何从Java websocket服务器发送图像以在HTML5画布中使用?

如何从Java websocket服务器发送图像以在HTML5画布中使用?,java,image,websocket,html5-canvas,Java,Image,Websocket,Html5 Canvas,我有一个用Java实现的WebSocket服务器。当客户端连接时,我希望通过此连接发送一个图像,供客户端在画布元素中使用。我提出了以下服务器代码: public void onOpen(Connection connection) { try { BufferedImage image = ImageIO.read(new File("image.jpg")); ByteArrayOutputStream baos = new ByteArrayOutpu

我有一个用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];
            }
        }
    }
}
onmessage:function(m){
if(m.data){
if(Blob的m.data实例){
var blob=m.数据;
var字节=新的Uint8Array(blob);
var image=context.createImageData(canvas.width、canvas.height);

对于(var i=0;i请在发送之前尝试将图像转换为base64,例如:

function drawImage(imgString){
    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");

    var image = new Image();
    image.src = imgString;
    image.onload = function() {
        ctx.drawImage(image, 0, 0);
    };
}

一个关于如何在Java中将图像转换为base64的链接

你解决问题了吗?我正在做一个类似的项目,看看这个视频:6:15分钟,我还读到jpeg需要解码:嘿,你使用的连接类是什么?它来自哪个库?我在这里提问:它来自org.eclipse.jetty.websocket.websocket包,我从这个jar文件中包括:希望帮助看起来不错,我一有时间就会查看它。谢谢:)是的,这很有效!但是我使用了一个不同于您链接到的Base64编码类。我使用的那个类没有自动包含“data:image/png;Base64,”-前缀,所以我不得不自己添加。我不知道你建议的那个是否可以这样做。如果不能,则必须单独添加。base64编码和解码有一定的处理开销,并且生成的数据大约要大30%。有更好的解决方案吗?imgString是什么?