gpt4 book ai didi

javascript - 使用 Node.js 与 socket.io 和 fs 动态显示图像

转载 作者:行者123 更新时间:2023-12-02 14:43:45 25 4
gpt4 key购买 nike

作为我最后一年项目的一部分,我正在 Intel Galileo Gen 2 上运行 Node.js,我正在尝试使用 Galileo 使用网络摄像头拍照,并使用每次拍摄的图片将其发送到网页 Canvas 元素。

这是 Node.js 服务器上的代码:

    // this 'message' event receives the sketch datagram 
server.on("message", function (msg, rinfo) {
udp_msg = msg.toString();
if(udp_msg == "picTaken") {
fs.readFile(__dirname + '/pictures/pic'+picNum+'.jpg', function(err, buf){

io.emit('image', { image: true, buffer: buf.toString('base64') });
console.log('image file is initialized' + picNum);
picNum++;
});
}
//console.log("from " + rinfo.address + " message:" + udp_msg);
// just bypassing the message sent by the sketch
io.emit("server-event-info", udp_msg);
});

伽利略上运行的草图将字符串“picTaken”发送到服务器,这会导致调用此函数这是 html 页面上显示图像的代码:

<div class="pic">
<canvas id="img" width="280" height="220" style="border:1px solid #000000;">
Your browser does not support the HTML5 canvas tag.
</canvas>
</div>
<script>
var ctx = document.getElementById('img').getContext('2d');
socket.on("image", function(info) {
if (info.image) {
var img = new Image();
img.src = 'data:image/jpeg;base64,' + info.buffer;
ctx.drawImage(img, 0, 0);
console.log("Image received");
}
});
</script>

问题是浏览器似乎已接收到图像,因为它正在将“收到的图像”打印到控制台,但没有显示。如果我尝试静态显示图像(例如通过替换行

),它会起作用
  fs.readFile(__dirname + '/pictures/pic'+picNum+'.jpg', function(err, buf){

fs.readFile(__dirname + '/pictures/pic1.jpg', function(err, buf){

所以我不明白问题是什么

最佳答案

我发现问题是客户端正在接收图像,但我在尝试显示它之前没有等待它加载。我更改了客户端的代码以等待图像加载,然后显示图像并且它起作用了。现在是客户端的代码:

var ctx = document.getElementById('img').getContext('2d');
socket.on("image", function(info) {
if (info.image) {
var img = new Image();
img.onload = function () {
ctx.drawImage(img, 0, 0);
};
img.src = 'data:image/jpg;base64,' + info.buffer;
console.log("Image received");
}
});

关于javascript - 使用 Node.js 与 socket.io 和 fs 动态显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36777337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com