vue 项目调取本地摄像头实现可切换摄像头并拍照生成图片
- 需求描述
本地连接两个摄像头拍摄量具,需要切换摄像头进行拍照生成图片,并且把图片传输给后台。
- 解决方法
通过navigator对象 MediaDevices.enumerateDevices() 方法 请求一个可用的媒体输入和输出设备的列表,例如麦克风,摄像机,耳机设备等。 返回的 Promise 完成时,会带有一个描述设备的 MediaDeviceInfo 的数组。
MediaDevices 的方法详细描述
实现点击切换摄像头,并且生成图片,传输给后台
- 具体代码
- html部分
文章图片
- js部分
mounted() {
this.thisCancas = document.getElementById('canvasCamera')
this.thisContext = this.thisCancas.getContext('2d')
this.thisVideo = document.getElementById('videoCamera')
var videoElement = document.getElementById('video');
var videoElement1 = document.getElementById('video1');
navigator.mediaDevices.enumerateDevices().then(this.gotDevices)
.catch(this.handleError);
},
methods: {
// 获取本地设备
gotDevices(deviceInfos) {
var constraints = new Array(2);
var id = 0;
for (var i = 0;
i !== deviceInfos.length;
++i) {
var deviceInfo = deviceInfos[i];
if (deviceInfo.kind === 'videoinput') {
constraints[id] = {
video: {
deviceId: deviceInfo.deviceId
}
};
id = id + 1;
}
}
this.cameraList = constraints;
},
//打开摄像头
open() {
this._openvideohandler(this.cameraList[0]);
this.flag = true;
},
// 关闭摄像头
close() {
this.detect1Show = false;
this.closeVideo();
this.flag = false;
},
// 切换摄像头
change() {
this.changeFlag = !this.changeFlag;
if (this.changeFlag) {
this._openvideohandler(this.cameraList[1]);
} else {
this._openvideohandler(this.cameraList[0]);
}
},
// 拍照
takePic() {
this.contextmenuhandler();
},
// 生成blob 并且传输给后台
contextmenuhandler() {
this.context2d.drawImage(this.video, 0, 0, 1600, 1200);
this.dataURL64 = this.canvas.toDataURL("image/jpeg");
this.url = this.dataURL64;
// 讲图片生成blob格式
let _this = this;
let data = https://www.it610.com/article/{
labelId: this.labelId,
taskId: this.$route.params.taskId,
}
this.canvas.toBlob(function (blob) {
_this.blob = blob;
let param = new FormData();
param.append("file", blob);
detectionLabel(data, param).then((res) => {
if (res.data.success) {
_this.$Message.success('检测成功');
_this.detect1Show = false;
_this.closeVideo();
_this.$nextTick(() => {
_this.update();
_this.url = '';
});
} else {
_this.$Message.warning(res.data.msg || '检测失败')
_this.detect1Show = false;
_this.closeVideo();
_this.url = '';
}
})
}, "image/jpeg");
},
}
- 总结
【vue.js|vue 项目调取本地摄像头可切换摄像头并拍照生成图片】由于之前做过单摄像头的项目,还算简单的解决这个问题了。在此记录下方法,希望能帮助到有需要的人。
推荐阅读
- 计算机网络|【前端vue——系列6】vue连接摄像头并实现摄像头暂停,计时,截图到本地等功能
- vue.js|VUE实现调用摄像头和拍照功能
- vue|vue pc端调用摄像头进行拍照并实现裁剪上传
- javascript|说一说实战项目升级从vue2到vue3 之main.js 区别
- Vue日常总结|vue的动态组件和异步组件及keep-alive
- Vue日常总结|vue-cli v4.5.17脚手架创建项目与运行原理
- Vue日常总结|后台管理系统模板
- 装一个Vue CLI(脚手架)
- 技术·教程|Javascript中遇到的问题: 缓动动画函数的封装