怎么用H5调用本地摄像头,相册并且多选,求各位大神赐教
如果是在纯web中调用摄像头,推荐使用input标签的方式,兼容性比较好,可以参照如下链接:
http://www.qdfuns.com/notes/2...
网上有很多文章使用video和canvas实现,但是进过测试,兼容性非常不理想。如果不是兼容特定的机型,不推荐使用。具体你可以用下面的代码测试一下:
<html>
<head>
<title>html5调用摄像头拍照</title>
<style type="text/css">
#camera {
width: 640px;
height: 525px;
position: fixed;
border: 1px solid #f0f0f0;
-moz-border-radius: 4px 4px 0 0;
-webkit-border-radius: 4px 4px 0 0;
border-radius: 4px 4px 0 0;
-moz-box-shadow: 0 0 4px rgba(0,0,0,0.6);
-webkit-box-shadow: 0 0 4px rgba(0,0,0,0.6);
box-shadow: 0 0 4px rgba(0,0,0,0.6);
}
#buttons {
text-align: center;
}
.btn {
width: 99px;
height: 38px;
line-height: 32px;
margin: 0px 4px 0px 0px;
border: 1px solid #fff;
-moz-border-radius: 5px; /* Gecko browsers */
-webkit-border-radius: 5px; /* Webkit browsers */
border-radius: 5px; /* W3C syntax */
cursor: default;
text-align: center;
font-size: 14px;
color: #fff;
}
.btn_blue {
background-color: #5CACEE;
}
.btn_green {
background-color: #00EE00;
}
.hidden{ display:none }
</style>
</head>
<body>
<div id="camera">
<div id="contentHolder">
<video id="video" width="640" height="480" autoplay></video>
<canvas style="display:none;" id="canvas" width="640" height="480"></canvas>
</div>
<div id="buttons">
<button id="btn_snap" class="btn btn_blue">拍照</button>
<button id="btn_cancel" class="btn btn_blue" style="display:none;">取消</button>
<button id="btn_upload" class="btn btn_green" style="display:none;">上传</button>
</div>
</div>
</body>
</html>
<script type="text/javascript">
// 添加事件监听器
window.addEventListener("DOMContentLoaded", function () {
// 获取元素,创建设置等等
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);
};
// 添加video 监听器
if (navigator.getUserMedia) { // 标准
navigator.getUserMedia(videoObj, function (stream) {
video.src = stream;
video.play();
}, errBack);
} else if (navigator.webkitGetUserMedia) { // WebKit 前缀
navigator.webkitGetUserMedia(videoObj, function (stream) {
video.src = window.webkitURL.createObjectURL(stream);
video.play();
}, errBack);
}
else if (navigator.mozGetUserMedia) { // Firefox 前缀
navigator.mozGetUserMedia(videoObj, function (stream) {
video.src = window.URL.createObjectURL(stream);
video.play();
}, errBack);
}
else {
alert("浏览器不支持HTML5!");
//console.log('your browser not support getUserMedia');
}
document.getElementById("btn_snap").addEventListener("click", function () {
context.drawImage(video, 0, 0, 640, 480);
});
}, false);
</script>
5 回答1.6k 阅读
5 回答1.8k 阅读✓ 已解决
4 回答1.4k 阅读
2 回答968 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.1k 阅读
看你的应用场景在哪里?
1.如果是在app中嵌入h5,可以让app提供原生接口,调用摄像头和相册。
2.如果是在微信公众号里,可以集成微信的sdk,也能提供摄像头和相册的接口,当然那也是微信客户端对本地接口的封装。
3.如果是纯粹的手机浏览器,调用摄像头也可以,但兼容性不太好,主要用到video和canvas。而相册功能,貌似原生的input(type=file)就可以的,只是不支持多选。