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

ops/2024/11/28 4:13:13/

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

 

一、静音定时拍照

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

javascript">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

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

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

 

三、关闭定时拍照

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

javascript">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设置到屏幕外的地方。

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

 


http://www.ppmy.cn/ops/137250.html

相关文章

Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch中的节点&#xff08;比如共20个&#xff09;&#xff0c;其中的10个选了一个master&#xff0c;另外10个选了另一个master&#xff0c;怎么办&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch中的节…

基于Java Springboot点餐系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

阿里Qwen系列开源模型介绍

模型种类丰富 Qwen2&#xff1a;包含Qwen2-0.5b、Qwen2-1.5b、Qwen2-7b、Qwen2-57b-a14b以及Qwen2-72b等五种规模的预训练和指令微调模型&#xff0c;其在多语言处理、长文本处理、代码生成、数学和逻辑推理等能力上&#xff0c;在mmlu、gpqa、humaneval等国际测评中得到了验证…

NLP 1、人工智能与NLP简介

人人都不看好你&#xff0c;可偏偏你最争气 —— 24.11.26 一、AI和NLP的基本介绍 1.人工智能发展流程 弱人工智能 ——> 强人工智能 ——> 超人工智能 ① 弱人工智能 人工智能算法只能在限定领域解决特定的问题 eg&#xff1a;特定场景下的文本分类、垂直领域下的对…

前端css绝对位置相关知识点

前端中的 绝对定位&#xff08;position: absolute&#xff09;是一个非常常用的布局方式&#xff0c;它可以让一个元素相对于最近的定位父元素进行定位&#xff08;不是相对于页面的默认位置&#xff09;。这里是关于 绝对定位 的一些关键知识点。 1. position: absolute 的基…

webrtc音频模块介绍(一) 音频引擎的架构

音频引擎的架构图 ADM位于最下层&#xff0c;直接于各种系统的音频设备打交道。音频引擎的音频处理模块包括: 音频编解码&#xff0c;Mixer(混音)&#xff0c;AudioProcess(3A算法)。 音频引擎的数据流转图 音频引擎全局只有一个&#xff0c;由所有的call对象所共享(一个pc对…

Git的使用_仓库管理_CI/CD介绍

文章目录 一、Git的基础知识一-1、什么是GitLinux命令行的git的简易安装Git项目的组成Git的基本工作流程Git文件的三种状态 一-2、存储库远程存储库与本地存储库创建存储库git init命令的使用方法1. 初始化一个新的 Git 仓库2. 在指定目录初始化一个新的 Git 仓库3. 初始化一个…

创建者模式-单例模式

单例设计模式&#xff08;Singleton Pattern&#xff09;是一种常见的设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供全局访问点。使用单例模式时&#xff0c;我们通常需要保证以下几点&#xff1a; 只有一个实例&#xff1a;类的实例是唯一的。提供全局访问…