我在英国Galileo Gen 2上运行Node.js作为我最后一年项目的一部分,我正在尝试使用Galileo使用网络摄像头拍照并每次使用网页拍摄照片。画布元素。
这是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>
问题是图像似乎是由浏览器接收的,因为 这是印刷图像接收&#39;到控制台但它没有显示。如果我尝试静态显示图像,比如替换行
,它就可以工作 fs.readFile(__dirname + '/pictures/pic'+picNum+'.jpg', function(err, buf){
带
fs.readFile(__dirname + '/pictures/pic1.jpg', function(err, buf){
所以我不知道问题是什么
答案 0 :(得分:1)
我发现问题是客户端正在接收图像,但在我尝试显示之前我并未等待它加载。我在客户端更改了代码以等待图像加载,然后显示图像并且它工作正常。以下是客户端的代码:
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");
}
});