整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

(亲测可用)html5调用手机摄像头

切图网一个客户的webapp项目中需要用到 html5调用手机摄像头,找了很多资料,大都是 js调用api 然后怎样怎样,做了几个demo测试发现根本不行, 后来恍然大悟,用html5自带的 input file="" ,纯html5,并且不涉及到js ,就可以实现。代码如下:

  1. <input type="file" accept="image/*" capture="camera">

  2. <input type="file" accept="video/*" capture="camcorder">

  3. <input type="file" accept="audio/*" capture="microphone">

capture表示,可以捕获到系统默认的设备,比如:camera--照相机;camcorder--摄像机;microphone--录音。

accept表示,直接打开系统文件目录。

其实html5的input:file标签还支持一个multiple属性,表示可以支持多选,如:

  1. <input type="file" accept="image/*" multiple>

加上这个multiple后,capture就没啥用了,因为multiple是专门yong用来支持多选的。

切图社区(qietu.cn)原创。

目中需要用到 html5调用手机摄像头,找了很多资料,大都是 js调用api ,做了几个demo测试发现根本不行, 后来恍然大悟,用html5自带的 input file="" ,纯html5,并且不涉及到js ,就可以实现。

代码如下:

capture表示,可以捕获到系统默认的设备,比如:camera--照相机;camcorder--摄像机;microphone--录音。

accept表示,直接打开系统文件目录。

其实html5的input:file标签还支持一个multiple属性,表示可以支持多选,如:

加上这个multiple后,capture就没啥用了,因为multiple是专门用来支持多选的。

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

  1. <!--

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

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

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

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

  6. -->

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

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

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

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

JavaScript代码

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

  1. // Put event listeners into place

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

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

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

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

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

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

  8. errBack = function(error) {

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

  10. };

  11. // Put video listeners into place

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

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

  14. video.src = stream;

  15. video.play();

  16. }, errBack);

  17. } elseif(navigator.webkitGetUserMedia) { // WebKit-prefixed

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

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

  20. video.play();

  21. }, errBack);

  22. }

  23. elseif(navigator.mozGetUserMedia) { // Firefox-prefixed

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

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

  26. video.play();

  27. }, errBack);

  28. }

  29. }, false);

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

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

    1. // 触发拍照动作

    2. document.getElementById("snap")

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

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

    5. });

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

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