通过HTML5的getUserMedia实现拍照功能

1. 通过getUserMedia调用设备的摄像头(电脑、手机都可以,取决于浏览器对这个API的支持情况),并将资源放入video标签。
2. 将video内的视频资源通过canvas的drawImage API放入canvas里,这个canvas是不显示的。
3. 将canvas的内容转换成base64编码的webp格式的图像(如果浏览器不支持这个格式,会fallback到png格式)放入img里,于是你就能看到你拍的照片了。

不废话了,上代码:

HTML

<!doctype html>
<html>
<head>
    <title>html5 capture test</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <video autoplay></video>
    <img src="">
    <canvas style="display: none;"></canvas>
    <button id="capture">snapshot</button>

    <script src="index.js"></script>
</body>
</html>

JS

var video = document.querySelector(‘video‘);
var canvas = document.querySelector(‘canvas‘);
var ctx = canvas.getContext(‘2d‘);
var localMediaStream = null;

var snapshot = function () {
    if (localMediaStream) {
        ctx.drawImage(video, 0, 0);
        document.querySelector(‘img‘).src = canvas.toDataURL(‘image/webp‘);
    }
};

var sizeCanvas = function () {
    setTimeout(function () {
        canvas.width = video.videoWidth;
        canvas.height = video.videoHeight;
        img.width = video.videoWidth;
        img.height = video.videoHeight;
    }, 100);
};

var btnCapture = document.getElementById(‘capture‘);
btnCapture.addEventListener(‘click‘, snapshot, false);

navigator.webkitGetUserMedia(
    {video: true},
    function (stream) {
        video.src = window.URL.createObjectURL(stream);
        localMediaStream = stream;
        sizeCanvas();
    },
    function () {
        alert(‘your browser does not support getUserMedia‘);
    }
);

几个注意事项:

  • 不同浏览器对getUserMedia的支持情况不同,需要加上前缀,比如webkitGetUserMedia、mozGetUserMedia、msGetUserMedia,如果你想屏蔽这一问题的话,可以这样做:
// cross platforms
var myGetUserMedia = navigator.getUserMedia || 
                 navigator.webkitGetUserMedia ||
                 navigator.mozGetUserMedia || 
                 navigator.msGetUserMedia;
  • Chrome对file:///做了很多的限制,跨域就不说了,geolocation也不能在本地下使用,这个getUserMedia也是。
  • 这个sizeCanvas函数做的事情就是保证你拍到的照片的大小和摄像头拍到的大小是一样的,否则会出现拍到的照片只有摄像头录到的一部分画面的情况。

http://blog.csdn.net/journey191/article/details/40744015

时间: 2024-10-12 23:11:36

通过HTML5的getUserMedia实现拍照功能的相关文章

HTML5调用摄像头实现拍照功能(兼容各大主流浏览器)

本人亲测,兼容各大主流浏览器,HTML5太强大了,需要的留下邮箱哦 如果想要马上收到,则可到我的资源下载 http://download.csdn.net/detail/laijieyao/8169971

HTML5+Canvas+jQuery调用手机拍照功能实现图片上传(二)

上一篇只讲到前台操作,这篇专门涉及到Java后台处理,前台通过Ajax提交将Base64编码过的图片数据信息传到Java后台,然后Java这边进行接收处理,通过对图片数据信息进行Base64解码,之后使用流将图片数据信息上传至服务器进行保存,并且将图片的路径地址存进数据库.ok,废话不多说了,直接贴代码吧. 1.前台js代码: $.ajax({ async:false,//是否异步 cache:false,//是否使用缓存 type: "POST", data:{fileData:fi

html5调用摄像头实现拍照

技术时刻都在前进着.我们的需求也是时刻在改变着.最近在开发中遇到了用户进行账号注册时需要个人图像,网站提供自动拍照功能.还有在登录了PC之后,手机端进行登录时只需要扫描一下PC上的二维码就可以登录.这对一个网络来说难度是极大的. 技术的进步使我们遇到了html5.下面这个简单粗暴的demo就是来完成这些功能的.直接看代码: <!DOCTYPE html> <html> <head> <title>html5调用摄像头实现拍照</title> &l

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

利用html5调用本地摄像头拍照上传图片 html5概念啥的就不废话了,不知道的 百度, 谷歌一堆..今天学了学html5中的Canvas结合新增的<video>标签来获取本地摄像头,在html5之前,要在浏览器获取本地摄像头只有通过插件(ActiveX,但是这种只有IE支持)或者是flash来获取(或许你没学过flash那就很坑爹了),在之后微软的silvertlight中也可以获取,但这些都比较麻烦,在html5的世界里,要获取本地摄像头,只要配合js就可以轻松获取.. 目前支持html5

使用Html5多媒体实现微信语音功能

随着微信等社交App的兴起,语音聊天成为很多App必备功能,大到将语音聊天作为主要功能的社交App,小到电商App的语音客服.店小二功能,语音聊天成为了必不可少的方式. 但是很多人感觉网页端语音离我们很遥远,这些更多是本地应用的工作,其实不然,随着Html5的发展,语音功能也渐渐成为前端必会的功能之一. 为什么要学会HTML5 的语音呢? 1.Html5 规范推进,手机的更新加速了操作系统更新,语音功能将会变成前端主要的工作之一,就像现在的canvas一样.前端实现语音功能开发速度更快,更节省人

UWP开发之Template10实践二:拍照功能你合理使用了吗?(TempState临时目录问题)

最近在忙Asp.Net MVC开发一直没空更新UWP这块,不过有时间的话还是需要将自己的经验和大家分享下,以求共同进步. 在上章[UWP开发之Template10实践:本地文件与照相机文件操作的MVVM实例(图文付原代码)]已经谈到了使用FileOpenPicker进行文件选择,以及CameraCaptureUI进行拍照. 对于文件选择一般进行如下设置就能实现: // 选择多个文件 FileOpenPicker openPicker = new FileOpenPicker(); openPic

相册、图库、拍照功能的访问以及图像角度设置

在我们需要访问UIImagePickerController的时候,一般为选择图片,此时我们可能需要做如下操作: 一.访问相册.图库.拍照功能: 二.图片设置: 1.需要将选择的图片缩小 (等比例): 2.设置图片的形状 (比如:希望选择的图片为圆形): 3.将图片翻转一定的角度 (比如翻转90度.180度等) 以下是我自己的总结的一些方法: 一.访问功能 - (IBAction)changeIconAction:(UITapGestureRecognizer *)sender { // UIA

WPF中实现拍照功能(利用“WPFMediaKit.dll”)

开始先展示下效果图: -------------------------------下面记录步骤:------------------------------------------------------ 下载“WPFMediaKit.dll”程序开发包,用在项目中添加引用: 在WPF窗口引入并命名: xmlns:wpfMedia="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit" 在界面用到一个V

Android使得手机拍照功能的发展(源共享)

Android系统调用手机拍照功能有两种方法来直接调用手机自带摄像头还有一个就是要当心自己的节拍. 例Camera360 强大的一个在每个操作系统都有一个手机摄影软件:您可以捕捉不同风格,不同特效的照片,同一时候具有云服务和互联网分享功能,全球用户已经超过2.5亿.如今专门的开发一款手机摄影软件肯定没多大意义,已经比只是这些前辈了.我们仅仅需学会怎样调用手机自带的摄像机完毕拍照并把照片获取过来,为用户提供上传头像,发表图文微博,传送图片的功能就可以. 完毕上述的功能十分的简单,甚至不须要在清单文