如何使用html5实现利用html5 摄像头拍照上传传功能

今天看啥 热点:
HTML5——利用navigator+Video调用摄像头进行录像,html5navigator
&&&&&&&&&&&&&
&&&&&& 以前无聊的时候玩儿过HTML5,感觉里面的很多新标签确实深深震撼了我额。。。。
&&&&&& 今天需求那边要做这样一个功能,在微信里面调用摄像头进行拍摄,然后上传。刚开始最先想到的是Video标签,只要将它的src指定为当前摄像头录制到的视频就可以了。
&&&&&&&&& 后来百度了一段,发现还要用上Navigator,具体代码如下:
&&&&&&&&&&&&&
&html xmlns=&http://www.w3.org/1999/xhtml&&
&head runat=&server&&
&title&&/title&
&script type=&text/javascript&&
window.addEventListener(&DOMContentLoaded&, function () {
// Grab elements, create settings, etc.
var canvas = document.getElementById(&canvas&),
context = canvas.getContext(&2d&),
video = document.getElementById(&video&),
videoObj = { &video&: true },
errBack = function (error) {
console.log(&Video capture error: &, error.code);
if (navigator.getUserMedia) { // Standard
navigator.getUserMedia(videoObj, function (stream) {
video.src =
video.play();
}, errBack);
} else if (navigator.webkitGetUserMedia) { // WebKit-prefixed引擎
navigator.webkitGetUserMedia(videoObj, function (stream) {
video.src = window.webkitURL.createObjectURL(stream);
video.play();
}, errBack);
else if (navigator.mozGetUserMedia) { // Firefox-prefixed
navigator.mozGetUserMedia(videoObj, function (stream) {
video.src = window.URL.createObjectURL(stream);
video.play();
}, errBack);
}, false);
&form id=&form1& runat=&server&&
&video id=&video& width=&640& height=&480& autoplay&&/video&
&button id=&snap&&Snap Photo&/button&
&canvas id=&canvas& width=&640& height=&480&&&/canvas&
&&&&&&&& 搞完之后同事大哥发布到服务器上然后拿手机测试,发现微信里面的浏览器是不支持摄像头调用的。。。额,,然后就我勒个去了。。。。。。。
&&&&&&&& 有用到的小伙伴可以拿到自己网站上玩儿玩儿。。。。
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&&&&&&&
WEB前端教程最近更新友情链接:联系人:QQ如何使用HTML5实现利用摄像头拍照上传功能
如何使用HTML5实现利用摄像头拍照上传功能
(为便于阅读,对原文进行了不失原意的适当修改,包括代码中一些错误的重复,并作了注释)
  HTML5技术支持WebApp在手机上拍照,显示在页面上并上传到服务器。这是手机微博应用中常见的功能,当然你也可以在其它类型应用中适当使用此技术。
  1、 视频流
  HTML5 的 The Media Capture(媒体捕捉) API 提供了对摄像头的可编程访问,用户可以直接用 getUserMedia
(请注意目前仅Chrome和Opera支持)获得摄像头提供的视频流。我们需要做的是添加一个HTML5 的 Video 标签,并将从摄像头获得的视频作为这个标签的输入来源。
&video id=”video” autoplay=”"&&/video& &script& var video_element=document.getElementById(‘video’); if(navigator.getUserMedia){ // opera应使用opera.getUserMedianow &&&&& navigator.getUserMedia(‘video’,success,error);& //success是回调函数,当然你也可以直接在此写一个匿名函数} function success(stream){ &&&& video_element.src= } &/script&
此时,video 标签内将显示动态的摄像视频流。下面需要进行拍照了。
  2、 拍照
  拍照是采用HTML5的Canvas功能,实时捕获Video标签的内容,因为Video元素可以作为Canvas图像的输入,所以这一点很好实现。主要代码如下:
var canvas=document.createElement(‘canvas’); //动态创建画布对象var ctx=canvas.getContext(’2d’); var cw=vw,ch= ctx.fillStyle=”#ffffff”; ctx.fillRect(0,0,cw,ch); ctx.drawImage(video_element,0,0,cw,ch,0,0,vw,vh); //将video对象内指定的区域捕捉绘制到画布上指定的区域,可进行不等大不等位的绘制。document.body.append(canvas);
  3、 图片获取
  从Canvas获取图片数据的核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像,类似于“data:image/base64,xxxxx”的格式。
var imgData=canvas.toDataURL(“image/png”);
这样,imgData变量就存储了一长串的字符数据内容,表示的就是一个PNG图像的base64编码。因为真正的图像数据是base64编码逗号之后的部分,所以要让实际服务器接收的图像数据应该是这部分,我们可以用两种办法来获取。
  第一种:是在前端截取22位以后的字符串作为图像数据,例如:
var data=imgData.substr(22);
  如果要在上传前获取图片的大小,可以使用:
var length=atob(data). //atob 可解码用base-64解码的字串
  第二种:是在后端获取传输的数据后用后台语言截取22位以后的字符串(也就是在前台略过上面这步直接上传)。例如PHP里:
$image=base64_decode(str_replace(‘data:image/base64,’,”,$data);
  4、 图片上传
  在前端可以使用Ajax将上面获得的图片数据上传到后台脚本。例如使用jQuery时可以用:
$.post(‘upload.php’,{‘data’:data});
在后台我们用PHP脚本接收数据并存储为图片。
function convert_data($data){ &&&& $image=base64_decode(str_replace(‘data:image/base64,’,”,$data); &&&& save_to_file($image); } function save_to_file($image){ &&& $fp=fopen($filename,’w'); &&& fwrite($fp,$image); &&& fclose($fp); }
  以上的解决方案不仅能用于Web App拍照上传,也可以通过Canvas的编辑功能函数提供图片编辑,例如裁剪、上色、涂鸦、圈点等功能,然后把用户编辑完的图片上传保存到服务器上。
  在还在不断补充修正的HTML5的驱动下,Web App与Native App之间的距离将越来越小。在可预见的不远的未来,越来越多老的和新的开发项目必将会迁移到WEB应用上来。
相关规范:
The MediaCapture API:
本文转自:&并进行了排版和内容上的一些适当修改。
发表评论:
TA的最新馆藏[转]&[转]&问说网 / 蜀ICP备号HTML5调用手机摄像头拍照实时上传
分享这个视频的人喜欢
热门视频推荐
热门日志推荐
同类视频推荐
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&
请输入手机号,完成注册
请输入验证码
密码必须由6-20个字符组成
下载人人客户端
品评校花校草,体验校园广场}

我要回帖

更多关于 flash摄像头拍照 上传 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信