移动设备和桌面电脑上的客户端API起初并不是同步的。最初总是移动设备上先拥有某些功能和相应的API,但慢慢的,这些API会出现在桌面电脑上。其中一个应用接口技术就是getUserMedia API,它能让应用开发者访问用户的摄像头或内置相机。下面就让我展示一下如何通过浏览器来访问你的摄像头,并提取截屏图形。

  下面的代码里写了一部分注释,请阅读:

1.  <!--

2.      理想情况下我们应该先判断你的设备上是否

3.      有摄像头或相机,但简单起见,我们在这里直接

4.      写出了HTML标记,而不是用JavaScript先判断

5.      然后动态生成这些标记

6.  -->

7.  <video id="video" width="640" height="480" autoplay></video>

8.  <button id="snap">Snap Photo</button>

9.  <canvas id="canvas" width="640" height="480"></canvas>

在写出上面这些标记前应该判断用户的客户端是否有摄像头支持,但这里为了不那么麻烦,这里直接写出了这些HTML标记,需要注意的是我们这里使用的长宽是640×480。

  JavaScript代码

  因为是手工写出的HTML,所以下面的js代码会比你想象的要简单了很多。

1.  // Put event listeners into place

2.

3.  window.addEventListener("DOMContentLoaded", function() {

4.

5.  // Grab elements, create settings, etc.

6.

7.  var canvas = document.getElementById("canvas"),

8.

9.  context = canvas.getContext("2d"),

10.

11. video = document.getElementById("video"),

12.

13. videoObj = { "video": true },

14.

15. errBack = function(error) {

16.

17. console.log("Video capture error: ", error.code);

18.

19. };

20.

21. // Put video listeners into place

22.

23. if(navigator.getUserMedia) { // Standard

24.

25. navigator.getUserMedia(videoObj, function(stream) {

26.

27. video.src = stream;

28.

29. video.play();

30.

31. }, errBack);

32.

33. } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed

34.

35. navigator.webkitGetUserMedia(videoObj, function(stream){

36.

37. video.src = window.webkitURL.createObjectURL(stream);

38.

39. video.play();

40.

41. }, errBack);

42.

43. }

44.

45. else if(navigator.mozGetUserMedia) { // Firefox-prefixed

46.

47. navigator.mozGetUserMedia(videoObj, function(stream){

48.

49. video.src = window.URL.createObjectURL(stream);

50.

51. video.play();

52.

53. }, errBack);

54.

55. }

56.

57. }, false);

  一旦判断出用户浏览器支持getUserMedia,下面就非常简单了,只需要将那个video元素的src设置为用户的摄像头视频直播连接。这就是用浏览器访问摄像头需要做的所有的事情!

  拍照的功能只能说是稍微复杂一点点。我们在按钮上加入一个监听器,将视频画面画到画布上。

1.  // 触发拍照动作

2.

3.  document.getElementById("snap")

4.

5.  .addEventListener("click", function() {

6.

7.  context.drawImage(video, 0, 0, 640, 480);

8.

9.  });

  当然,你还可以在图片上加一些滤镜效果….我还是把这些技术放到以后的文章里再说吧。但至少你可以将这个画布图像转换成一张图片。

  以前我们需要使用第三方的插件才能从浏览器里访问用户的摄像头,这不免有些复杂。现在只需要HTML5的画布技术和javaScript,我们就能简单快速的操作用户的摄像头。不仅仅还是访问摄像头,而且是因为HTML5的画布技术及其强大,我们可以给图片上加入各种迷人的滤镜效果。现在,在浏览器里用自己的摄像头给自己拍张照片吧!

WEB前端学习交流群21 598399936

转载于:https://www.cnblogs.com/luludehuhuan/p/7644728.html

使用HTML5技术控制电脑或手机上的摄像头相关推荐

  1. 使用HTML5技术控制电脑或手机上的摄像头(转载)

    移动设备和桌面电脑上的客户端API起初并不是同步的.最初总是移动设备上先拥有某些功能和相应的API,但慢慢的,这些API会出现在桌面电脑上.其中一个应用接口技术就是getUserMedia API,它 ...

  2. HTML5 Canvas+JS控制电脑或手机上的摄像头实例

    移动设备和桌面电脑上的客户端API起初并不是同步的.最初总是移动设备上先拥有某些功能和相应的API,但慢慢的,这些API会出现在桌面电脑上.其中一个应用接口技术就是getUserMedia API,它 ...

  3. 基于socket实现虚拟手柄使用手机控制电脑游戏(上)-电脑服务端

    基于socket实现虚拟手柄使用手机控制电脑游戏(上)-电脑服务端 这个是关于利用socket套接字实现手机控制电脑按键的一个实例,完成这个项目可以实现用手机控制狂野飙车等游戏,就是一个简易的手机虚拟 ...

  4. java连接电脑可以把整个文件下载到手机里然后直接用么,如果是山寨机支持java如何用电脑往手机上下载软件...

    如果是山寨机支持java如何用电脑往手机上下载软件 浏览次数:6388次悬赏分:0|解决时间:2009-4-26 09:09|提问者:李佳朔 最佳答案 目前国内的大多数国产手机均支持mpr格式软件!也 ...

  5. 视频文件 wrf格式,可以通过WRF格式视频转换器_wrf转成wmv 转换成 wmv格式,可以在电脑或手机上观看,且声音也能转换过来。之前wrf用耳机貌似播放不出来,之后是可以播放出来的。

    视频文件 wrf格式,可以通过WRF格式视频转换器_wrf转成wmv 转换成 wmv格式,可以在电脑或手机上观看,且声音也能转换过来.之前wrf用耳机貌似播放不出来,之后是可以播放出来的. wmv可以 ...

  6. 有什么便签软件是可以在电脑和手机上同步记日记的?

    记日记是个非常好的习惯,除了锻炼我们的写作水平外,在日记中总结我们的工作,还让我们得以在总结当天工作的基础上,提前布置明天的工作.那么,方便写日记的便签有哪些呢?需要那种在手机和电脑上同步记日记的便签 ...

  7. 电脑或手机上访问192.168.0.1无线路由器WiFi密码怎么找回?

    无线路由器WiFi密码怎么找回? 1.电脑或手机已连接当前网站,在电脑或手机上打开浏览器,输入IP地址:192.168.0.1 (部分型号路由器IP地址不同,请参考路由器底部的标签): 2.输入后访问 ...

  8. 怎么用手机控制电脑?手机控制手机如何实现?

    随着远程控制技术的发展,怎么用手机控制电脑是很多人的疑问.用手机远程控制电脑,通过手机实现对电脑的实时操作,实现手机与电脑同时兼得的效果.本文小编教您怎么用手机控制电脑,希望可以帮助到大家. 怎么用手 ...

  9. 用计算机遥控手机,怎么用手机控制电脑?手机控制手机如何实现?

    随着远程控制技术的发展,怎么用手机控制电脑是很多人的疑问.用手机远程控制电脑,通过手机实现对电脑的实时操作,实现手机与电脑同时兼得的效果.本文小编教您怎么用手机控制电脑,希望可以帮助到大家. 怎么用手 ...

最新文章

  1. PHP版本如何选择?应该使用哪个版本?
  2. tensorflow中sess.run第一个参数衣服不能随便穿
  3. PaddleOCR——运行错误【Please compile with gpu to EnableGpu()】解决方案
  4. 用 Gearman 分发 PHP 应用程序的工作负载
  5. 什么是485中继器,RS-485中继器产品介绍
  6. 【项目管理】知识域在过程组中的体现
  7. Codeforces Round #503 (by SIS, Div. 2) C. Elections
  8. 中国半导体制冷市场趋势报告、技术动态创新及市场预测
  9. mac下压缩mp3音频文件/linux 适用
  10. 阿里云商标注册流程步骤-阿里云商标自助注册申请步骤
  11. 高校大数据专业教学实训资源解决方案
  12. 一文了解AAAI国际会议–附: 各年论文连接
  13. 基因芯片(Affymetrix)分析3:获取差异表达基因
  14. python字典包含字典_Python字典教学
  15. 语义网络,语义网,链接数据和知识图谱
  16. MAC上QuickTime截取音乐片段/iphone换铃声
  17. 7000字和你聊聊如何设计一款高并发架构(建议收藏)
  18. 朗润外盘国际期货:ChatGPT这个人工智能有点东西
  19. 吴恩达老师,被曝靠「教书」实现首个IPO上市,Coursera估值50亿美元
  20. 关于ScrollView嵌套RecyclerView时RecyclerView不显示的问题

热门文章

  1. 5分钟部署一个Hello World Servlet到CloudFoundry
  2. rac的crs进程是做什么的_Oracle rac进程详解
  3. 计算机组成原理中wr是什么,计算机组成原理复习例题.doc
  4. gradle拷贝静态资源文件_Gradle-操作文件文件拷贝
  5. 2017年上半年全国高等学校安徽考区计算机水平考试,教务处关于2017年上半年全国高等学校(安徽考区)计算机水平考试报名的通知-教务处...
  6. 如果要用thinkphp框架_php需要改哪些配置,thinkPHP框架动态配置用法实例分析
  7. python爬虫cookie池 与ip绑定_Python爬虫防封ip的一些技巧
  8. demo 网络运维_网络运维简介
  9. IDEA创建mavenWeb项目笔记
  10. 杨辉三角Python解法