利用html5调用本地摄像头拍照上传图片
这个是前台HTML的代码。
1 <div id="contentHolder"> 2 <video id="video" width="320" height="320" autoplay></video> 3 <button id="snap" style="display:none"> 拍照</button> 4 <canvas style="display:none" id="canvas" width="320" height="320"></canvas> 5 </div>
下面这个是主要代码了。(jquery)
1 <script> 2 //判断浏览器是否支持HTML5 Canvas 3 window.onload = function () { 4 try { 5 //动态创建一个canvas元 ,并获取他2Dcontext。如果出现异常则表示不支持 6 document.createElement("canvas").getContext("2d"); 7 document.getElementByIdx("support").innerHTML = "浏览器支持HTML5 CANVAS"; 8 } 9 catch (e) { 10 document.getElementByIdx("support").innerHTML = "浏览器不支持HTML5 CANVAS"; } }; 11 //这段代 主要是获取摄像头的视频流并显示在Video 签中 12 window.addEventListener("DOMContentLoaded", function () { 13 var canvas = document.getElementByIdx("canvas"), 14 context = canvas.getContext("2d"), 15 video = document.getElementByIdx("video"), 16 videoObj = { "video": true }, 17 errBack = function (error) { 18 console.log("Video capture error: ", error.code); 19 }; 20 //navigator.getUserMedia这个写法在Opera中好像是navigator.getUserMedianow 21 if (navigator.getUserMedia) { 22 navigator.getUserMedia(videoObj, function (stream) { 23 video.src = stream; 24 video.play(); 25 }, errBack); 26 } else if (navigator.webkitGetUserMedia) 27 { 28 navigator.webkitGetUserMedia(videoObj, function (stream) { 29 video.src = window.webkitURL.createObjectURL(stream); 30 video.play(); 31 }, errBack); 32 } 33 //这个是拍照按钮的事件, 34 $("#snap").click(function () { 35 context.drawImage(video, 0, 0, 320, 320); 36 //CatchCode(); 37 }); 38 }, false); 39 //定时器 40 var interval = setInterval(CatchCode, "300"); 41 //这个是 刷新上 图像的 42 function CatchCode() { 43 $("#snap").click(); 44 //实际运用可不写,测试代 , 为单击拍照按钮就获取了当前图像,有其他用途 45 var canvans = document.getElementByIdx("canvas"); 46 //获取浏览器页面的画布对象 47 //以下开始编 数据 48 var imgData = canvans.toDataURL(); //将图像转换为base64数据 49 var base64Data = imgData.substr(22); //在前端截取22位之后的字符串作为图像数据 50 //开始异步上 51 $.post("uploadImgCode.ashx", { "img": base64Data }, 52 function (data, status) { 53 if (status == "success") { 54 if (data == "OK") { 55 alert("二维 已经解析"); 56 }else { 57 // alert(data); 58 } 59 } else { 60 alert("数据上 失败"); 61 } 62 }, "text"); 63 } 64 </script> 65 最后的就是接收经过base64编码之后的图像文件了。 66 67 public void ProcessRequest (HttpContext context) { 68 string img; 69 //接收经过base64编 之后的字符串 70 context.Response.ContentType = "text/plain"; 71 try { 72 img =context.Request["img"].ToString();//获取base64字符串 73 byte[] imgBytes = Convert.FromBase64String(img);//将base64字符串转换为字节数组 74 System.IO.Stream stream = new System.IO.MemoryStream(imgBytes);//将字节数组转换为字节流 75 //将流转回Image,用于将PNG 式照片转为jpg,压缩体积以便保存。 76 System.Drawing.Image imgae = System.Drawing.Image.FromStream(stream); 77 imgae.Save(context.Server.MapPath("~/Test/") + Guid.NewGuid().ToString()+".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);//保存图片 78 context.Response.Write("OK");//输出调用结果 79 } 80 catch (Exception msg) { 81 img = null; 82 context.Response.Write(msg); 83 return; 84 } 85 }