欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 微信小程序:实现定时拍照与自动上传功能攻略——静音版

微信小程序:实现定时拍照与自动上传功能攻略——静音版

2024/11/29 18:46:33 来源:https://blog.csdn.net/Jiaberrr/article/details/144031836  浏览:    关键词:微信小程序:实现定时拍照与自动上传功能攻略——静音版

在之前的文章中,我介绍过可以用ctx.takePhoto来实现定时拍照,但是在实际使用过程中,会有快门声,影响用户体验感,本文中,我们将介绍如何在微信小程序中实现静音定时拍照功能,并将拍摄的照片上传到服务器。我们将使用onCameraFrame方法替代takePhoto来避免快门声。

 

一、静音定时拍照

首先,我们定义了一个getPhoto方法,该方法将使用onCameraFrame来捕获相机帧数据,并将其转换为图片,然后上传到服务器。

getPhoto(ctx) {let that = this;let bool = true;let listener = ctx.onCameraFrame((frame) => {if (bool) {let data = new Uint8Array(frame.data);let clamped = new Uint8ClampedArray(data);that.setData({canvasHeight: frame.height,canvasWidth: frame.width});wx.canvasPutImageData({canvasId: 'myCanvas',x: 0,y: 0,width: frame.width,height: frame.height,data: clamped,success(res) {// 转换临时文件wx.canvasToTempFilePath({x: 0,y: 0,width: frame.width,height: frame.height,canvasId: 'myCanvas',success(res) {wx.uploadFile({url: app.globalData.url + '/imageToWords/uploadFile',filePath: res.tempFilePath,header: {'content-type': 'multipart/form-data','Authorization': app.globalData.wstoken},name: 'upload',success(uploadRes) {// 处理上传成功的结果if (uploadRes.statusCode == 200) {let data = JSON.parse(uploadRes.data);if (data.success) {that.voiceBroadcast(data.data);let text = data.data.replace(/\n/g, "<br/>");that.setData({ text: text });} else {util.errorAffirm(data.message);}} else {util.errorAffirm(uploadRes.errMsg);}}});},fail(err) {util.errorAffirm(err);console.log('转换失败', err);}}, that);},fail(err) {util.errorAffirm(err);console.log("canvasPutImageData 失败", err);}}, that);}bool = false;listener && listener.stop() && (listener = null);});listener.start();
}

在这个方法中,我们首先设置了一个bool标志,以确保只处理一次帧数据。然后,我们使用onCameraFrame监听相机帧数据,将数据转换为Uint8ClampedArray,并使用wx.canvasPutImageData将其绘制到画布上。接着,我们使用wx.canvasToTempFilePath将画布内容转换为临时文件路径,最后通过wx.uploadFile上传到服务器。

二、定时器设置

为了实现定时拍照,我们需要在timedPhotographing方法中调用getPhoto

timedPhotographing() {const ctx = wx.createCameraContext();this.data.myTime = setInterval(() => {this.getPhoto(ctx);}, this.data.IntervalTime);
}

这里,我们使用setInterval设置了一个定时器,每隔IntervalTime毫秒调用一次getPhoto方法。

 

三、关闭定时拍照

当不需要定时拍照时,我们可以通过以下方法关闭定时器:

endTimedPhotograph() {clearInterval(this.data.myTime);this.data.myTime = null;
}

 

四、页面布局

在页面的WXML文件中,我们需要添加一个摄像头组件和一个画布组件来显示相机预览和绘制帧数据。

<camera device-position="back" flash="off" binderror="error" style="width: 100%; height: 100%;"></camera>
<canvas canvas-id="myCanvas" style="width: 100%; height: 100%; position: absolute; top: 0; left: 0;"></canvas>

如果不想要展示canvas画布,可将style设置到屏幕外的地方。

通过以上步骤,我们成功实现了微信小程序的静音定时拍照与上传功能,用户可以定时拍摄照片而无需听到快门声,并将照片上传到服务器进行进一步处理。 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com