微信小程序最近非常火热,小编最近做了一个微信小程序开发新项目,使用小程序开发考试系统,在使用App参加考试的时候调用摄像头抓拍用户是否作弊,在开发过程中遇到点问题,下面小编把问题描述和解决方法分享给大家,具体内容如下:

问题

今天小编遇到了这么个问题,就是在用户使用App参加考试的时候调用摄像头抓拍用户是否作弊,其实这也没什么,关键在于不能打扰用户考试,不能被用户发现什么时候抓拍的,也不能给用户查看图片,只有考完是后才能查看。这系统相当于考驾照时的上机答题部分。开始经理的要求是调用小程序外部的手机拍摄功能,这要可把我吓的够呛。

 解决方法

遇到这种问题肯定要先找下官网的帮助文档,于是找到了调用摄像头的这么一个模块

相机组件控制 (wx.createCameraContext)

说明

创建并返回 camera 上下文 cameraContext 对象,cameraContext 与页面的 camera 组件绑定,一个页面只能有一个camera,通过它可以操作对应的 <camera/> 组件。 在自定义组件下,第一个参数传入组件实例this,以操作组件内 <camera/> 组件

cameraContext 对象的方法列表:

takePhoto OBJECT 拍照,可指定质量,成功则返回图片
startRecord OBJECT 开始录像
stopRecord OBJECT 结束录像,成功则返回封面与视频

takePhoto 的 OBJECT 参数列表:

quality String 成像质量,值为high, normal, low,默认normal
success Function 接口调用成功的回调函数 ,res = { tempImagePath }
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

这不是有个拍照功能的模块吗,于是去找了一下官网所给的代码研究了一下:

官网代码:

wxml代码:

<view class="page-body">
<view class="page-body-wrapper">
<camera device-position="back" flash="off" binderror="error" style="width: 100%; height: 300px;"></camera>
<view class="btn-area">
<button type="primary" bindtap="takePhoto">拍照</button>
</view>
<view class="btn-area">
<button type="primary" bindtap="startRecord">开始录像</button>
</view>
<view class="btn-area">
<button type="primary" bindtap="stopRecord">结束录像</button>
</view>
<view class="preview-tips">预览</view>
<image wx:if="{{src}}" mode="widthFix" src="{{src}}"></image>
<video wx:if="{{videoSrc}}" class="video" src="{{videoSrc}}"></video>
</view>
</view>

js代码:

Page({
onLoad() {this.ctx = wx.createCameraContext()
},takePhoto() {this.ctx.takePhoto({quality: 'high',success: (res) => {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代码:

.preview-tips {margin: 20rpx 0;
}
.video {margin: 50px auto;width: 100%;height: 300px;
}

这代码修改还是可以的只是不是我想要的那种,我要的是隐藏没有摄像头的,和自动抓拍功能的,

官网代码分析:

<camera device-position="back" flash="off" binderror="error" style="width: 100%; height: 300px;"></camera>

这是摄像头模块,这模块只要不是隐藏,宽高不为0,都可以正常使用静默隐藏拍照功能

this.ctx = wx.createCameraContext()

这是获取摄像头图像功能

takePhoto() {this.ctx.takePhoto({quality: 'high',success: (res) => {this.setData({src: res.tempImagePath})}})
},

这是拍照功能,并没有和摄像头一起使用,只要创建了摄像头并不隐藏的情况下可以单独调用

就这几行代码就差不多可以实现我想要的功能了,拍照功能单独用定时器来调用,只差一个隐藏摄像头的功能了,在官网上找找。有没有新发现......

在组件里发现有这么一个模块叫

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 里面去就行了,

也就是这么个意思

<camera><cover-view></cover-view>
</camera> 

这样效果是可以但太占空间了 于是我就把<camera>宽高设成了

width: 10rpx;
height: 14rpx;

注:只要不隐藏不为0都是可以的拍照的清晰度没有变化只有宽高比例有变化

同样<cover-view>也要把摄像机铺满,背景色调为周围一样的颜色这就相当于静默隐藏摄像头功能了,再加上定时器抓拍就完成了这项功能。 安教通在线考试系统就是利用的这个方法实现的微信小程序调用摄像头静默隐藏拍照功能。

完成代码:

wxml代码:

<view class="page-body">
<view class="page-body-wrapper">
<camera device-position="front" flash="off" binderror="error" class="camera" bindstop='bindstop' binderror='binderror'>
<cover-view class='border_writh'></cover-view>
</camera>
<view class="btn-area">
<button type="primary" bindtap="stoptime">停止</button>
</view>
<view class="preview-tips">预览</view>
<image wx:if="{{src}}" mode="widthFix" src="{{src}}"></image>
</view>
</view>

wxss代码:

.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代码:

var time = null;
Page({
/**
* 页面的初始数据
*/
data: {
},
onLoad() {
},
//定时器拍照
setTime: function() {let that = thislet ctx = wx.createCameraContext()time = setInterval(function() {if (Math.round(Math.random()) == 1) {console.log('拍照')//拍照ctx.takePhoto({quality: 'high',success: (res) => {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)
},
})

以上所述是微信小程序开发(3) - 微信小程序调用摄像头静默拍照功能实现方式。

微信小程序开发(3) - 微信小程序调用摄像头静默隐藏拍照功能实现方式相关推荐

  1. 微信小程序开发实现微信支付

    微信支付是时下最流行的交易支付方法之一,潜移默化推动着无现今社会的变革.小程序作为微信上的轻应用,同时也开放微信支付的接口,可以通过转账,扫二维码支付.要完成一次具体的订单支付需要完整的支付流程,具体 ...

  2. 微信小程序开发(一) 微信登录流程

    文/YXJ 地址:http://blog.csdn.net/sk719887916/article/details/53761107 最近在研究微信小程序开发,非常有意思的一个东西.花了一点时间写了一 ...

  3. 小程序开发教程、小程序资讯、小程序demo、小程序实战等合揖(7月19日更新)

    7月19日微信小程序联盟更新的小程序开发教程.小程序资讯.小程序demo.小程序实战内容合揖如下: 小程序资讯与小程序教程 一张图带你看懂小程序发展蓝皮书 2017-07-19 微信小程序开发问答&l ...

  4. 小程序开发教程、小程序资讯、小程序demo、小程序实战等合揖(7月19日更新)...

    2019独角兽企业重金招聘Python工程师标准>>> 7月19日微信小程序联盟更新的小程序开发教程.小程序资讯.小程序demo.小程序实战内容合揖如下: #小程序资讯与小程序教程 ...

  5. 微信公众平台开发[3] —— 微信公众号支付功能(PHP)

    直言无讳,我就是一个初涉微信开发的小白,写这篇博客的原因:一是为了给自己做下备忘记录,以便以后能回忆这条程序猿的坎坷路:二是希望能帮助到同是自学开发的小白们:三是对那些不屑一顾于我等尘埃的大牛们的控诉 ...

  6. 视频教程-基于python的微信公众号开发教程-微信开发

    基于python的微信公众号开发教程 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试(软考)--"信 ...

  7. 微信公众 mysql回复图片_微信公众号开发之微信公共平台消息回复类实例

    本文实例讲述了微信公众号开发之微信公共平台消息回复类.分享给大家供大家参考.具体如下: 微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,这里就给各位 ...

  8. 视频教程-微信公众平台开发入门-微信开发

    微信公众平台开发入门 订阅后,请点击此处观看大牛全套视频课程:课程播放页链接 价格可能因活动略有浮动 刘运强 ¥39.00 立即订阅视频课 订阅后:请点击此处观看视频课程 视频教程-微信公众平台开发入 ...

  9. 微信公众平台开发[2] —— 微信端分享功能

    背景 初次尝试微信公众号的开发,对于学习方法的探索都是来源于网上的博客.问答,对于参差不齐的信息,自己也是有苦说不出,抽出一点时间写点文章,既是对自己的学习总结,也希望给予同是菜鸟的小白一点帮助. 今 ...

最新文章

  1. 设置Eclipse编码方式
  2. configSections 位置引起的错误
  3. mine 规范_《民用建筑热工设计规范》GB50176-2016
  4. 嵌入式实时操作系统的基本概念——μ/COS-II读书笔记
  5. 数据结构(四)串的顺序存储
  6. 7-188 编程团体赛 (20 分)
  7. 监听input框值得改变
  8. JupyterNotebook中更新pip以及使用pip install安装lightgbm
  9. SpringBoot上传文件到后端服务器
  10. CentOS7下docker服务无法启动的一般检查
  11. HyperLedger Fabric 查询机制
  12. unity 关于搜索
  13. 将一张图片的人物融入另一张图片中
  14. dota 英雄使用 曙光酒馆《2》
  15. 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(7月29日)...
  16. 《Fast User-Guided Video Object Segmentation by Interaction-and-Propagation Networks》论文笔记
  17. vtk开源库学习网站
  18. WinDebug的一些基本使用命令
  19. 1.7 积分上限函数的图形
  20. 电脑是如何识别USB 3.0 U盘的

热门文章

  1. Django中的ORM模型
  2. 分享关于风控反欺诈系统的资料
  3. C++构造函数、析构函数、this指针、初始化列表
  4. vegan素食认证介绍
  5. R语言survminer包的pairwise_survdiff函数多重比较分组中多个生成曲线的差异并输出p值、使用symnum函数将p值转化为等级表示星号
  6. QT多线程网络编程程序崩溃问题与解决
  7. 2021年9月PMP认证考试招生火热进行中!
  8. 高考志愿填什么,才不会被 AI 抢饭碗!
  9. 制作棋盘格标定板(固定分辨率解决尺度问题)
  10. google guava事件总线用法