javascript 从缓冲区将图像绘制到 html (nodejs/socket.io)

标签 javascript node.js socket.io

(对不起我的英语) 嗨,我有一个用 nodejs 创建的应用程序,用于将图像数据推送到网页中。

使用socket.io将nodejs服务器的数据推送到网页

此数据为完整图像,我尝试写入光盘以查看图像并且很好。 数据被放入缓冲区以 base64 编码然后发送到网页,我尝试使用 'data:image/png;base64,'+数据 但什么也没发生……数据似乎是“完整的”,包括 PNG 图像的标题。

服务器使用 thrift 与另一个客户端(在 C++ 中)通信,该客户端创建图像并发送到 nodejs-thrift 服务器,当接收到图像时,nodejs-socket.io 服务器推送到网页。

一些代码: 服务器端

var http = require('http'),
url = require('url'),
fs  = require('fs'),
sys = require('sys');
var hserver = http.createServer(function(request,response){
var path = url.parse(request.url).pathname;
switch(path){
   case '/':

        fs.readFile(__dirname + '/index.html',function(err,data){
           if(err) return send404(res);
           response.writeHead(200,{'Content-Type':'text/html'});
           response.write(data,'utf8');
           response.end(); 
        });
    break;
    default: send404(response);
}
   }),
send404 = function(res){
 res.writeHead(404);
 res.write('404');
 res.end();
};

hserver.listen(8080);
var io = require('socket.io');
var socket = io.listen(hserver);
//this is the function in the Thrift part to send the image data to webpage using socket.io
var receiveImage = function(image,success){
buff= new Buffer(image.data.toString('base64'),'base64');
socket.broadcast({
    data: buff.toString('base64'),
    width: image.width,
    height: image.height
});
success(true);
}

在网页中,我尝试使用 socket.io 的 on.message 回调加载图像

<script>
var socket = new io.Socket(null,{port:8080});
socket.connect();
socket.on('message',function(obj){
        document.getElementById('imagenes').src='data:image/png;base64,'+obj.data.toString();
});
socket.on('connect',function(){         
    document.getElementById('stream').innerHTML = "Conectado!"
});
</script>

但是我看不到图片.. obj.data.toString('base64') 创建一个像这样的字符串:

 PNGIHDRKIDATxYw5L1LlFMM/migzWUadOadLUd+43PIfPU9VU5AJAg3dIWUmHAMajS8GUuq ............
 .............
 /NIlWDHUDmIPdHIEND

是图片的所有数据..

我怎样才能显示图像?? (可能使用 img 标签或进入 Canvas )

提前致谢。

编辑:对代码进行了一些更改,但没有任何改变..我的猜测..图像没有显示,因为数据 (PNGIHDRKIDATxYw ......PdHIENDB) 不是正确的数据..我搜索这个和用于显示内联图像的 png 数据是不同的(没有标题 PNGIHDRKIDAT 和尾部 ENDB),我删除了标题和尾部并且不显示..也许我收到的数据不正确,但如果我尝试使用 nodejs (fs) 写入服务器端的文件系统 我使用二进制获得正确的图像(使用 fs.writeFileSync("imagen.png",image.data.toString('binary'),'binary') )编码,但是使用 base64 编码没有图像。

最佳答案

在 C++ 端(我在其中创建图像并将它们发送到 nodejs 服务器)。我需要在 base64 中对数据进行编码。然后在 Node 中,我将这些数据放入带有 base64 编码的缓冲区中,并将其发送到网页。

关于javascript 从缓冲区将图像绘制到 html (nodejs/socket.io),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6208234/

相关文章:

node.js - node js "response.on(' data', func(chunk))》是否保证chunk边界

javascript - 如何在通过socket.io事件设置后更改图像src?

javascript - 如何使用 Jquery/Javascript AutoComplete 解码 HTML 实体

javascript - 使用动态 url 从 javascript POST 到 php

javascript - 屏幕外汉堡包导航

javascript - Jquery Ajax 调用 HTML5 历史记录和后退按钮

javascript - Meteor-Up 问题 Mup 部署

node.js - 使用 Node 检查器调试 CoffeeScript 源

javascript - Socket.io 分别与每个用户合作

python - 基本的 socket.io 应用程序不工作