用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - php代码库

利用html5调用本地摄像头拍照上传图片

2017-04-28 作者: 读你举报

[php]代码库

   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了...
 

 
#html5 #摄像头 #拍照上传 #canvas


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...