微信小程序最近非常火热,小编最近做了一个新项目,使用小程序开发考试系统,在使用App参加考试的时候调用摄像头抓拍用户是否作弊,在开发过程中遇到点问题,下面小编把问题描述和解决方法分享给大家,具体内容如下:
问题
今天小编遇到了这么个问题,就是在用户使用App参加考试的时候调用摄像头抓拍用户是否作弊,其实这也没什么,关键在于不能打扰用户考试,不能被用户发现什么时候抓拍的,也不能给用户查看图片,只有考完是后才能查看。这系统相当于考驾照时的上机答题部分。开始经理的要求是调用小程序外部的手机拍摄功能,这要可把我吓的够呛。
遇到这种问题肯定要先找下官网的帮助文档,于是找到了调用摄像头的这么一个模块
相机组件控制 (wx.createCameraContext)
说明:
创建并返回 camera 上下文 cameraContext 对象,cameraContext 与页面的 camera 组件绑定,一个页面只能有一个camera,通过它可以操作对应的 组件。 在自定义组件下,第一个参数传入组件实例this,以操作组件内 组件
cameraContext 对象的方法列表:
takePhoto 的 OBJECT 参数列表:
normal,low,默认normal调用成功的回调函数 ,res = { tempImagePath }调用失败的回调函数调用结束的回调函数(调用成功、失败都会执行)
这不是有个拍照功能的模块吗,于是去找了一下官网所给的代码研究了一下:
官网代码:
wxml代码:
rush:js;">
js代码:
{
this.setData({
src: res.tempImagePath
})
}
})
},startRecord() {
this.ctx.startRecord({
success: (res) => {
console.log('startRecord')
}
})
},stopRecord() {
this.ctx.stopRecord({
success: (res) => {
this.setData({
src: res.tempThumbPath, videoSrc: res.tempVideoPath
})
}
})
},error(e) {
console.log(e.detail)
}
})
wxcss代码:
rush:js;">
.preview-tips {
margin: 20rpx 0;
}
.video {
margin: 50px auto;
width: 100%;
height: 300px;
}
这代码修改还是可以的只是不是我想要的那种,我要的是隐藏没有摄像头的,和自动抓拍功能的,
官网代码分析:
这是摄像头模块,这模块只要不是隐藏,宽高不为0,都可以正常使用拍照功能
this.ctx = wx.createCameraContext()
这是获取摄像头图像功能
rush:js;">
takePhoto() {
this.ctx.takePhoto({
quality: 'high',
这是拍照功能,并没有和摄像头一起使用,只要创建了摄像头并不隐藏的情况下可以单独调用
就这几行代码就差不多可以实现我想要的功能了,拍照功能单独用定时器来调用,只差一个隐藏摄像头的功能了,在官网上找找。有没有新发现......
在组件里发现有这么一个模块叫
cover-view
描述:覆盖在原生组件之上的文本视图,可覆盖的原生组件包括map、video、canvas、camera、live-player、live-pusher,只支持嵌套cover-view、cover-image,可在cover-view中使用button。
这模块的意思是说cover-view 可以覆盖掉camera这控件
camera这模块也是这么个奇葩的存在,你用z-index层次不管多大都无法覆盖掉,这里就要用到cover-view组件了
一开始我也不知道怎么用,于是上网查了查,博友们都是这么说的 cover-view 嵌套到 camera 里面去就行了,
也就是这么个意思
rush:js;">
这样效果是可以但太占空间了 于是我就把宽高设成了
width: 10rpx;
height: 14rpx;
只要不隐藏不为0都是可以的拍照的清晰度没有变化只有宽高比例有变化
同样也要把摄像机铺满,背景色调为周围一样的颜色这就相当于隐藏摄像头功能了,再加上定时器抓拍就完成了这项功能。
完成代码:
wxml代码:
rush:js;">
wxss代码:
rush:js;">
.preview-tips {
margin: 20rpx 0;
}
.video {
margin: 50px auto;
width: 100%;
height: 300rpx;
}
.border_writh{
width: 30rpx;
height: 30rpx;
background-color:#1aad19;
}
.camera{
position: absolute;
top: 5rpx;
left: 5rpx;
width: 10rpx;
height: 14rpx;
}
js代码:
{
console.log(res.tempImagePath)
that.setData({
src: res.tempImagePath
})
that.localhostimgesupdata(res.tempImagePath)
}
})
}
},1000 * 10) //循环间隔 单位ms
},//
图片上传
localhostimgesupdata: function(imgPath) {
console.log('
图片上传')
wx.uploadFile({
url: '',/
图片上传服务器真实的接口地址
filePath: imgPath, name: 'imgFile', success: function(res) {
wx.showToast({
title: '
图片上传成功', icon: 'success', duration: 2000
})
}
})
},stoptime: function() {
console.log('定时停止')
clearInterval(time)
},bindstop: function() {
console.log('非正常停止')
},binderror: function() {
console.log('
用户拒绝授权')
},/**
* 生命周期
函数--监听
页面显示
*/
onShow: function() {
console.log('
显示')
//定时器
this.setTime();
},/**
* 生命周期
函数--监听
页面隐藏
*/
onHide: function() {
console.log('隐藏')
clearInterval(time)
},/**
* 生命周期
函数--监听
页面卸载
*/
onUnload: function() {
console.log('卸载')
clearInterval(time)
},})
总结
以上所述是小编给大家介绍的微信小程序调用摄像头隐藏式拍照功能。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。