利用html5调用本地摄像头拍照上传图片
2017-03-23 13:40
591 查看
html5概念啥的就不废话了,不知道的
百度, 谷歌一堆。。今天学了学html5中的Canvas结合新增的<video>标签来获取本地摄像头,在html5之前,要在浏览器获取本地摄像头只有通过插件(ActiveX,但是这种只有IE支持)或者是flash来获取(或许你没学过flash那就很坑爹了),在之后微软的silvertlight中也可以获取,但这些都比较麻烦,在html5的世界里,要获取本地摄像头,只要配合js就可以轻松获取。。
目前支持html5的浏览器(参考http://www.cnblogs.com/jerry_cong/archive/2011/05/15/2047143.html)
看看主要代码吧:
这个是前台HTML的代码。
<div id="contentHolder">
<video id="video" width="320" height="320" autoplay>
</video>
<button id="snap" style="display:none"> 拍照</button>
<canvas style="display:none" id="canvas" width="320" height="320">
</canvas>
</div>
复制代码
下面这个是主要代码了。(jquery)
<script>
//判断浏览器是否支持HTML5 Canvas
window.onload = function () {
try {
//动态创建一个canvas元 ,并获取他2Dcontext。如果出现异常则表示不支持 document.createElement("canvas").getContext("2d");
document.getElementByIdx("support").innerHTML = "浏览器支持HTML5 CANVAS";
}
catch (e) {
document.getElementByIdx("support").innerHTML = "浏览器不支持HTML5 CANVAS";
}
};
//这段代 主要是获取摄像头的视频流并显示在Video 签中
window.addEventListener("DOMContentLoaded", function () {
var canvas = document.getElementByIdx("canvas"),
context = canvas.getContext("2d"),
video = document.getElementByIdx("video"),
videoObj = { "video": true },
errBack = function (error) {
console.log("Video capture error: ", error.code);
};
//navigator.getUserMedia这个写法在Opera中好像是navigator.getUserMedianow
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);
}
//这个是拍照按钮的事件,
$("#snap").click(function () {
context.drawImage(video, 0, 0, 320, 320);
//CatchCode();
});
}, false);
//定时器
var interval = setInterval(CatchCode, "300");
//这个是 刷新上 图像的
function CatchCode() {
$("#snap").click();
//实际运用可不写,测试代 , 为单击拍照按钮就获取了当前图像,有其他用途
var canvans = document.getElementByIdx("canvas");
//获取浏览器页面的画布对象
//以下开始编 数据
var imgData = canvans.toDataURL();
//将图像转换为base64数据
var base64Data = imgData.substr(22);
//在前端截取22位之后的字符串作为图像数据
//开始异步上
$.post("uploadImgCode.ashx", { "img": base64Data }, function (data, status) {
if (status == "success") {
if (data == "OK") {
alert("二维 已经解析");
}
else {
// alert(data);
}
}
else {
alert("数据上 失败");
} }, "text");
}
</script>
复制代码
最后的就是接收经过base64编码之后的图像文件了。
public void ProcessRequest (HttpContext context) {
string img;//接收经过base64编 之后的字符串
context.Response.ContentType = "text/plain";
try {
img =context.Request["img"].ToString();
//获取base64字符串
byte[] imgBytes = Convert.FromBase64String(img);
//将base64字符串转换为字节数组
System.IO.Stream stream = new System.IO.MemoryStream(imgBytes);
//将字节数组转换为字节流
//将流转回Image,用于将PNG 式照片转为jpg,压缩体积以便保存。
System.Drawing.Image imgae = System.Drawing.Image.FromStream(stream);
imgae.Save(context.Server.MapPath("~/Test/") + Guid.NewGuid().ToString()+".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);//保存图片
context.Response.Write("OK");//输出调用结果
} catch (Exception msg) {
img = null;
context.Response.Write(msg);
return;
}
}
复制代码
至此B/S通过本地摄像头拍照上传就完成了。HTML5的强大之处,爱不释手了。。。不在像以前需要写一堆烦人的东东了,而且你也可以不用去学flash...
额外说一句,如果您还在用IE6\IE7那您还是别玩html5了...
初出茅庐,欢迎指教!!
原文:http://blog.sina.com.cn/s/blog_75ad9c560101cu3t.html
百度, 谷歌一堆。。今天学了学html5中的Canvas结合新增的<video>标签来获取本地摄像头,在html5之前,要在浏览器获取本地摄像头只有通过插件(ActiveX,但是这种只有IE支持)或者是flash来获取(或许你没学过flash那就很坑爹了),在之后微软的silvertlight中也可以获取,但这些都比较麻烦,在html5的世界里,要获取本地摄像头,只要配合js就可以轻松获取。。
目前支持html5的浏览器(参考http://www.cnblogs.com/jerry_cong/archive/2011/05/15/2047143.html)
看看主要代码吧:
这个是前台HTML的代码。
<div id="contentHolder">
<video id="video" width="320" height="320" autoplay>
</video>
<button id="snap" style="display:none"> 拍照</button>
<canvas style="display:none" id="canvas" width="320" height="320">
</canvas>
</div>
复制代码
下面这个是主要代码了。(jquery)
<script>
//判断浏览器是否支持HTML5 Canvas
window.onload = function () {
try {
//动态创建一个canvas元 ,并获取他2Dcontext。如果出现异常则表示不支持 document.createElement("canvas").getContext("2d");
document.getElementByIdx("support").innerHTML = "浏览器支持HTML5 CANVAS";
}
catch (e) {
document.getElementByIdx("support").innerHTML = "浏览器不支持HTML5 CANVAS";
}
};
//这段代 主要是获取摄像头的视频流并显示在Video 签中
window.addEventListener("DOMContentLoaded", function () {
var canvas = document.getElementByIdx("canvas"),
context = canvas.getContext("2d"),
video = document.getElementByIdx("video"),
videoObj = { "video": true },
errBack = function (error) {
console.log("Video capture error: ", error.code);
};
//navigator.getUserMedia这个写法在Opera中好像是navigator.getUserMedianow
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);
}
//这个是拍照按钮的事件,
$("#snap").click(function () {
context.drawImage(video, 0, 0, 320, 320);
//CatchCode();
});
}, false);
//定时器
var interval = setInterval(CatchCode, "300");
//这个是 刷新上 图像的
function CatchCode() {
$("#snap").click();
//实际运用可不写,测试代 , 为单击拍照按钮就获取了当前图像,有其他用途
var canvans = document.getElementByIdx("canvas");
//获取浏览器页面的画布对象
//以下开始编 数据
var imgData = canvans.toDataURL();
//将图像转换为base64数据
var base64Data = imgData.substr(22);
//在前端截取22位之后的字符串作为图像数据
//开始异步上
$.post("uploadImgCode.ashx", { "img": base64Data }, function (data, status) {
if (status == "success") {
if (data == "OK") {
alert("二维 已经解析");
}
else {
// alert(data);
}
}
else {
alert("数据上 失败");
} }, "text");
}
</script>
复制代码
最后的就是接收经过base64编码之后的图像文件了。
public void ProcessRequest (HttpContext context) {
string img;//接收经过base64编 之后的字符串
context.Response.ContentType = "text/plain";
try {
img =context.Request["img"].ToString();
//获取base64字符串
byte[] imgBytes = Convert.FromBase64String(img);
//将base64字符串转换为字节数组
System.IO.Stream stream = new System.IO.MemoryStream(imgBytes);
//将字节数组转换为字节流
//将流转回Image,用于将PNG 式照片转为jpg,压缩体积以便保存。
System.Drawing.Image imgae = System.Drawing.Image.FromStream(stream);
imgae.Save(context.Server.MapPath("~/Test/") + Guid.NewGuid().ToString()+".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);//保存图片
context.Response.Write("OK");//输出调用结果
} catch (Exception msg) {
img = null;
context.Response.Write(msg);
return;
}
}
复制代码
至此B/S通过本地摄像头拍照上传就完成了。HTML5的强大之处,爱不释手了。。。不在像以前需要写一堆烦人的东东了,而且你也可以不用去学flash...
额外说一句,如果您还在用IE6\IE7那您还是别玩html5了...
初出茅庐,欢迎指教!!
原文:http://blog.sina.com.cn/s/blog_75ad9c560101cu3t.html
相关文章推荐
- 利用html5调用本地摄像头拍照上传图片
- 利用html5调用本地摄像头拍照上传图片
- 利用html5调用本地摄像头拍照上传图片[转]
- 利用html5调用本地摄像头拍照上传图片
- 如何使用HTML5实现利用摄像头拍照上传功能
- html5调用手机摄像头,实现拍照上传功能
- html5调用手机摄像头,实现拍照上传功能
- 如何使用HTML5实现利用摄像头拍照上传功能(java版)
- 能够正常使用的,经过测试的java+jquery+webcam调用本地摄像头拍照,然后将拍照结果上传数据库blob字段功能的实现(二)
- Wp7: 调用摄像头拍照并上传图片(完整版)
- 如何使用HTML5实现利用摄像头拍照上传功能
- HTML5使用 getUserMedia方法调用本地摄像头拍照
- HTML5使用 getUserMedia方法调用本地摄像头拍照
- html5调用手机摄像头,实现拍照上传功能
- html5调用手机摄像头,实现拍照上传功能
- html5调用手机摄像头,实现拍照上传功能
- java opencv 调用摄像头实现拍照及本地保存 支持上传FTP 路径配置
- Wp7: 调用摄像头拍照并上传图片(完整版)
- html5调用手机摄像头,实现拍照上传功能
- 调用摄像头拍照以及上传图片