繁体   English   中英

使用node.js通过canvas dataURL从网络摄像头保存.png图像时文件无效

[英]Invalid file while saving .png image from webcam via canvas dataURL using node.js

我正在尝试做一个小应用程序,使用户可以使用网络摄像头拍摄照片并将其发送到服务器,以便将其存储为.png文件。 现在几乎所有东西都可以正常工作,您可以使用相机拍摄图片,然后发送表格,然后创建一个.png文件,但它似乎无效,而不是图像。 我在这段代码中缺少什么吗?

提前致谢。

这是前端代码:

window.addEventListener("DOMContentLoaded", function() {
var canvas = document.getElementById("canvas"),
context = canvas.getContext("2d"),
video = document.getElementById("video"),
videoObj = { "video": true },
errBack = function(error) {
    console.log(error.code); 
};

// Put video listeners into place
if(navigator.getUserMedia) {
    navigator.getUserMedia(videoObj, function(stream) {
        video.src = stream;
        video.play();
    }, errBack);
} else if(navigator.webkitGetUserMedia) {
    navigator.webkitGetUserMedia(videoObj, function(stream){
           video.src = window.webkitURL.createObjectURL(stream);
           video.play();
    }, errBack);
}
else if(navigator.mozGetUserMedia) {
    navigator.mozGetUserMedia(videoObj, function(stream){
        video.src = window.URL.createObjectURL(stream);
        video.play();
    }, errBack);
}
// Trigger photo snap
document.getElementById("snap").addEventListener("click", function() {
    context.drawImage(video, 0, 0, 640, 480);
    var dataURL = canvas.toDataURL('image/png').replace(/^data:image\/png;base64,/,'');
    var imginput = document.getElementById('imgdata');
    imginput.value = dataURL;
});
}, false);

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

// Load modules / dependencies
var http = require('http');
var fs = require('fs');
var qs = require('querystring');
var config = JSON.parse(fs.readFileSync('config.json'));
var port = config.port;

var server = http.createServer(function(request, response) {
console.log('Received request: ' + request.url);
fs.readFile('./' + request.url, function(error, data) {
    if (error) {
        response.writeHead(404, {'Content-type':'text/plain'});
        response.end('Sorry the page was not found');
    } else if (request.method == 'POST') {
        processPost(request, response, function() {
            console.log(response.post);
            response.writeHead(200, "OK", {'Content-Type': 'text/plain'});
            response.end();
        });
    } else {
        response.writeHead(200, {'Content-type':'text/html'});
        response.end(data);
    };
})
});

function processPost(request, response, callback) {
var queryData = "";
if(typeof callback !== 'function') return null;

if(request.method == 'POST') {
    request.on('data', function(data) {
        queryData += data;
        fs.writeFile('image.png', queryData, 'base64');
    });

    request.on('end', function() {
        callback();
    });

} else {
    response.writeHead(405, {'Content-Type': 'text/plain'});
    response.end();
}
}

    server.listen(port, function() {
    console.log('Listening ' + port);
});

我终于通过使用express并将服务器代码更改为以下代码使其工作:

var fs = require("fs");
var express = require("express");

var app = express();

app.use(express.static(__dirname + '/'));
app.use(express.bodyParser());

app.get('*', function(req, res) {
    res.sendfile('./index.html');
});

app.post('/', function(req, res) {
  var imgdata = req.body.userimg;
  fs.writeFile('image.png', imgdata, 'base64');
  res.sendfile('./index.html');
});

app.get("*", function(request, response){
    response.send("Page not found", 404);
});

app.listen(8080);
console.log("App listening on port 8080");

现在,它将从网络摄像头捕获的图像保存为有效的.png文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM