JavaScript 实现拍照功能详细示例代码
作者:拾光时间:2026-10-31 05:37:34浏览:193
本文详解如何利用 HTML5 getUserMedia API 在浏览器中调用摄像头。通过 JavaScript 获取视频流并在 video 标签播放,演示如何枚举设备以切换前后摄像头。结合 Canvas 将视频帧转换为 Base64 图片并实现下载保存,最后提供关闭摄像头的方法,适用于无需插件的网页拍照场景。
介绍
HTML5 提供的 getUserMedia API 允许网页应用直接访问硬件设备的媒体资源,包括摄像头、麦克风、音频流以及地理位置信息等。借助这一接口,开发者无需安装任何浏览器插件即可在网页中调用硬件媒体设备,实现更丰富的交互功能。
目前,Firefox、Chrome、Safari 和 Opera 等主流浏览器均已全面支持该 API,确保了跨平台的兼容性与可用性。
一、获取视频流,并用 video 标签播放
<video id="video" autoplay></video>const videoConstraints = { width: 1366, height: 768 };
const videoNode = document.querySelector('#video');
let stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: videoConstraints });
videoNode.srcObject = stream;
videoNode.play();二、多个摄像头设备切换
// enumerateDevices获取所有媒体设备
const mediaDevices = await navigator.mediaDevices.enumerateDevices();
// 通过设备实例king属性videoinput,过滤获取摄像头设备
const videoDevices = mediaDevices.filter(item => item.kind === 'videoinput') || [];
// 获取前置摄像头
const videoDeviceId = videoDevices[0].deviceId;
const videoConstraints = { deviceId: { exact: videoDeviceId }, width: 1366, height: 768 };
let stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: videoConstraints });
// 获取后置摄像头
const videoDeviceId = videoDevices[1].deviceId;
const videoConstraints = { deviceId: { exact: videoDeviceId }, width: 1366, height: 768 };
let stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: videoConstraints });
// 依次类推...
三、拍照保存图片
// 通过canvas捕捉video流,生成base64格式图片
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
canvas.width = 1366;
canvas.height = 768;
context.drawImage(videoNode, 0, 0, canvas.width, canvas.height);
download(canvas.toDataURL('image/jpeg'));
// 下载图片
function download (src) {
if (!src) return;
const a = document.createElement('a');
a.setAttribute('download', new Date());
a.href = src;
a.click();
}
关闭摄像头设备
let stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: videoConstraints });
// 3s后关闭摄像头
setTimeout(function () {
stream.getTracks().forEach(track => track.stop());
stream = null;
}, 3000);总结
至此,关于使用 JavaScript 实现拍照功能的教程已介绍完毕。如需了解更多相关实现细节,建议查阅本站历史文章或继续阅读后续内容。感谢支持,期待未来能有更多互动。
作者最新文章
JS处理含Emoji或中文的字符串转数组乱码问题
2026-11-05 16:12:28
JS怎么使用展开运算符合并对象
2026-11-05 14:42:18
ES6+环境下判断JS对象为空的简洁写法
2026-11-05 12:12:23
怎么通过replacer函数自定义JS中JSON的格式化输出
2026-11-05 11:19:44
JS正则表达式基础:字面量与RegExp构造函数的区别及常用元字符
2026-11-05 11:16:58
