Javascript 使用网络摄像头、jQuery和HTML存储捕获的图像?
我正在做一个使用html和java脚本的项目,但我不熟悉java脚本,但我对js功能知之甚少。我的项目基于网络摄像头和从网络摄像头捕获的图像,我已经完成了到网络摄像头,我从网络摄像头拍摄了照片,现在我的问题是我想使用捕获的按钮Id保存捕获的图像,我尝试了,但我没有如果有人知道,请帮助我 这是我的代码:'cam-video.html'Javascript 使用网络摄像头、jQuery和HTML存储捕获的图像?,javascript,html5-video,Javascript,Html5 Video,我正在做一个使用html和java脚本的项目,但我不熟悉java脚本,但我对js功能知之甚少。我的项目基于网络摄像头和从网络摄像头捕获的图像,我已经完成了到网络摄像头,我从网络摄像头拍摄了照片,现在我的问题是我想使用捕获的按钮Id保存捕获的图像,我尝试了,但我没有如果有人知道,请帮助我 这是我的代码:'cam-video.html' <div class="container" id="videophoto"> <div class="row">
<div class="container" id="videophoto">
<div class="row">
<div class="col-sm-6 col-md-6">
<div id="container">
<video id="videoel" width="400" height="300" preload="auto" loop playsinline autoplay>
</video>
<canvas id="overlay" width="400" height="300"></canvas>
</div>
<button id="capture" class="pic">Capture</button><br />
<!--<img src="examples/media/audrey.jpg" />-->
<div class="alert alert-success" id="success-alert">
<button type="button" class="close" data-dismiss="alert">x</button>
<img src="" id="photo" alt="photo">
捕获
x
这是我的javascript:'mine.js'
<script>
var vid = document.getElementById('videoel');
var vid_width = vid.width;
var vid_height = vid.height;
var overlay = document.getElementById('overlay');
var overlayCC = overlay.getContext('2d');
/*********** Setup of video/webcam and checking for webGL support *********/
function enablestart() {
var starttbutton = document.getElementById('starttbutton');
starttbutton.value = "start";
starttbutton.disabled = null;
}
var insertAltVideo = function(video) {
// insert alternate video if getUserMedia not available
if (supports_video()) {
if (supports_webm_video()) {
video.src = "./media/cap12_edit.webm";
} else if (supports_h264_baseline_video()) {
video.src = "./media/cap12_edit.mp4";
} else {
return false;
}
return true;
} else return false;
}
function adjustVideoProportions() {
// resize overlay and video if proportions of video are not 4:3
// keep same height, just change width
var proportion = vid.videoWidth/vid.videoHeight;
vid_width = Math.round(vid_height * proportion);
vid.width = vid_width;
overlay.width = vid_width;
}
function gumSuccess( stream ) {
// add camera stream if getUserMedia succeeded
if ("srcObject" in vid) {
vid.srcObject = stream;
} else {
vid.src = (window.URL && window.URL.createObjectURL(stream));
}
vid.onloadedmetadata = function() {
adjustVideoProportions();
vid.play();
}
vid.onresize = function() {
adjustVideoProportions();
if (trackingStarted) {
ctrack.stop();
ctrack.reset();
ctrack.start(vid);
}
}
}
function gumFail() {
// fall back to video if getUserMedia failed
insertAltVideo(vid);
document.getElementById('gum').className = "hide";
document.getElementById('nogum').className = "nohide";
alert("There was some problem trying to fetch video from your webcam, using a fallback video instead.");
}
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
window.URL = window.URL || window.webkitURL || window.msURL || window.mozURL;
// set up video
if (navigator.mediaDevices) {
navigator.mediaDevices.getUserMedia({video : true}).then(gumSuccess).catch(gumFail);
} else if (navigator.getUserMedia) {
navigator.getUserMedia({video : true}, gumSuccess, gumFail);
} else {
insertAltVideo(vid);
document.getElementById('gum').className = "hide";
document.getElementById('nogum').className = "nohide";
alert("Your browser does not seem to support getUserMedia, using a fallback video instead.");
}
vid.addEventListener('canplay', enablestart, false);
/*********** Code for face tracking *********/
var ctrack = new clm.tracker();
ctrack.init();
var trackingStarted = false;
function startVideo() {
// start video
vid.play();
// start tracking
ctrack.start(vid);
// var time=setTimeout("alert('Two Faces Not Allowed')",3500);
trackingStarted = true;
// start loop to draw face
drawLoop();
}
function drawLoop() {
requestAnimFrame(drawLoop);
overlayCC.clearRect(0, 0, vid_width, vid_height);
//psrElement.innerHTML = "score :" + ctrack.getScore().toFixed(4);
if (ctrack.getCurrentPosition()) {
ctrack.draw(overlay);
document.getElementById('photo').setAttribute('src', data);
}
}
/*********** Code for stats **********/
stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.top = '0px';
document.getElementById('container').appendChild( stats.domElement );
// update stats on every iteration
document.addEventListener('clmtrackrIteration', function(event) {
stats.update();
}, false);
</script>
<script type="text/javascript">
(function() {
var streaming = false,
video = document.querySelector('#video'),
canvas = document.querySelector('#canvas'),
buttoncontent = document.querySelector('#buttoncontent'),
photo = document.querySelector('#photo'),
startbutton = document.querySelector('#startbutton'),
width = 320,
height = 0;
navigator.getMedia = (navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
navigator.getMedia({
video: true,
audio: false
},
function(stream) {
if (navigator.mozGetUserMedia) {
video.mozSrcObject = stream;
} else {
var vendorURL = window.URL || window.webkitURL;
video.src = vendorURL.createObjectURL(stream);
}
video.play();
},
function(err) {
console.log("An error occured! " + err);
}
);
video.addEventListener('canplay', function(ev) {
if (!streaming) {
height = video.videoHeight / (video.videoWidth / width);
video.setAttribute('width', width);
video.setAttribute('height', height);
canvas.setAttribute('width', width);
canvas.setAttribute('height', height);
streaming = true;
}
}, false);
function takepicture(data_uri) {
video.style.display = "none";
canvas.style.display = "block";
startbutton.innerText= "RETAKE";
canvas.width = width;
canvas.height = height;
canvas.getContext('2d').drawImage(videoel, 0, 0, width, height);
var data = canvas.toDataURL('image/png');
photo.setAttribute('src', data);
var data = canvas.toDataURL('image/webp');
document.getElementById('photo').setAttribute('src', data);
document.getElementById("two").value = data;
document.myForm.sub();
document.getElementById('capture').innerHTML =
'<h2>Here is your image:</h2>' +
'<img src="' + data_uri + '"/>';
document.myForm.sub();
}
startbutton.addEventListener('click', function(ev) {
if(startbutton.innerText==="CAPTURE")
{
takepicture();
}
else
{
video.style.display = "block";
canvas.style.display = "none";
startbutton.innerText= "CAPTURE";
}
ev.preventDefault();
}, false);
})();
</script>
<script>
$(document).ready(function(){
$("#startbutton").click(function(){
$("#choosephoto").hide(1000);
});
});
</script>
var vid=document.getElementById('videoel');
var vid_width=vid.width;
var vid_高度=vid.height;
var overlay=document.getElementById('overlay');
var overlayCC=overlay.getContext('2d');
/***********设置视频/网络摄像头并检查webGL支持*********/
函数enablestart(){
var starttbutton=document.getElementById('starttbutton');
starttbutton.value=“开始”;
starttbutton.disabled=null;
}
var insertAltVideo=函数(视频){
//如果getUserMedia不可用,请插入备用视频
if(支持_video()){
if(支持_webm_video()){
video.src=“./media/cap12_edit.webm”;
}else if(支持\u h264\u基线\u视频(){
video.src=“./media/cap12_edit.mp4”;
}否则{
返回false;
}
返回true;
}否则返回false;
}
函数调整比例(){
//如果视频的比例不是4:3,请调整覆盖和视频的大小
//保持相同的高度,只需改变宽度
变量比例=vid.videoWidth/vid.videoHeight;
视频宽度=数学圆(视频高度*比例);
vid.width=vid_width;
叠加宽度=视频宽度;
}
功能成功(流){
//如果getUserMedia成功,则添加相机流
if(视频中的“srcObject”){
vid.srcObject=流;
}否则{
vid.src=(window.URL&&window.URL.createObjectURL(流));
}
vid.onloadedmetadata=函数(){
调整比例();
视频播放();
}
vid.onresize=函数(){
调整比例();
如果(trackingStarted){
ctrack.stop();
ctrack.reset();
ctrack.start(视频);
}
}
}
函数gumFail(){
//如果getUserMedia失败,请返回视频
插入视频(vid);
document.getElementById('gum').className=“hide”;
document.getElementById('nogum').className=“nohide”;
警报(“尝试从网络摄像头获取视频时出现问题,请改用备用视频。”);
}
navigator.getUserMedia=navigator.getUserMedia | | navigator.webkitGetUserMedia | | navigator.mozGetUserMedia | | navigator.msGetUserMedia;
window.URL=window.URL | | | window.webkitURL | | | window.msURL | | window.mozURL;
//设置视频
if(navigator.mediaDevices){
navigator.mediaDevices.getUserMedia({video:true}).then(gumSuccess).catch(gumFail);
}else if(navigator.getUserMedia){
getUserMedia({video:true},gumSuccess,gumFail);
}否则{
插入视频(vid);
document.getElementById('gum').className=“hide”;
document.getElementById('nogum').className=“nohide”;
警报(“您的浏览器似乎不支持getUserMedia,而是使用回退视频。”);
}
vid.addEventListener('canplay',enablestart,false);
/***********人脸跟踪代码*********/
var ctrack=new clm.tracker();
ctrack.init();
var trackingStarted=假;
函数startVideo(){
//开始视频
视频播放();
//开始跟踪
ctrack.start(视频);
//var time=setTimeout(“警报(‘不允许有两个面’)”,3500);
trackingStarted=true;
//开始循环以绘制面
drawLoop();
}
函数drawLoop(){
请求帧(drawLoop);
覆盖clearRect(0,0,视频宽度,视频高度);
//psrelation.innerHTML=“score:+ctrack.getScore().toFixed(4);
if(ctrack.getCurrentPosition()){
ctrack.draw(叠加);
document.getElementById('photo').setAttribute('src',data);
}
}
/***********统计代码**********/
统计数据=新统计数据();
stats.domElement.style.position='绝对';
stats.domElement.style.top='0px';
document.getElementById('c
function takepicture(data_uri) {
video.style.display = "none";
canvas.style.display = "block";
startbutton.innerText= "RETAKE";
canvas.width = width;
canvas.height = height;
canvas.getContext('2d').drawImage(videoel, 0, 0, width, height);
var data = canvas.toDataURL('image/png');
photo.setAttribute('src', data);
var data = canvas.toDataURL('image/webp');
document.getElementById('photo').setAttribute('src', data);
document.getElementById("two").value = data;
document.myForm.sub();
document.getElementById('capture').innerHTML =
'<h2>Here is your image:</h2>' +
'<img src="' + data_uri + '"/>';
document.myForm.sub();
}
//$