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

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

时间:2024-11-26 09:00:44浏览次数:9  
标签:拍照 静音版 微信 frame let 攻略 定时 data wx

在之前的文章中,我介绍过可以用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设置到屏幕外的地方。

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

 

标签:拍照,静音版,微信,frame,let,攻略,定时,data,wx
From: https://blog.csdn.net/Jiaberrr/article/details/144031836

相关文章

  • 学生活动管理系统微信小程序ssm+论文源码调试讲解
    2系统开发技术这部分内容主要介绍本系统使用的技术,包括使用的工具,编程的语言等内容。2.1微信开发者工具微信web开发者工具是国内腾讯公司开发的专门用来开发微信小程序的一个工具。开发过程中如果是项目团队开发,可以设置多个开发和测试成员,管理员可以在小程序管理后台添加......
  • 家庭事务管理微信小程序ssm+论文源码调试讲解
    2系统关键技术2.1微信小程序微信小程序,简称小程序,英文名MiniProgram,是一种全新的连接用户与服务的方式,可以快速访问、快速传播,并具有良好的使用体验。小程序的主要开发语言是JavaScript,它与普通web的开发有很多相似之处。小程序和普通网页开发并不是相同的东西,是有差异的......
  • MySQL面试攻略:从基础到高级,全面解析
    ......
  • 微信小程序下拉刷新与上拉触底的全面教程
    微信小程序下拉刷新与上拉触底的全面教程引言在微信小程序的开发中,用户体验至关重要。下拉刷新和上拉触底是提高用户交互体验的重要功能,能够让用户轻松获取最新数据和内容。本文将详细介绍这两个功能的实现方式,结合实际案例、代码示例和图片展示,帮助开发者轻松掌握下拉刷......
  • 微信小程序导航方式详解:声明式导航与编程式导航
    微信小程序导航方式详解:声明式导航与编程式导航引言在微信小程序的开发中,页面导航是实现用户交互的重要组成部分。小程序提供了两种主要的导航方式:声明式导航和编程式导航。了解这两种导航方式的特点、使用场景及其优缺点,对于提升小程序的用户体验和开发效率至关重要。本......
  • 微信小程序页面配置详解:从入门到精通
    微信小程序页面配置详解:从入门到精通引言随着移动互联网的飞速发展,微信小程序作为一种新兴的应用形式,因其便捷性和丰富的功能而受到广泛欢迎。在小程序的开发过程中,页面配置是至关重要的一环。本文将深入探讨微信小程序的页面配置,帮助开发者从基础到高级逐步掌握这一重要......
  • 2025年计算机毕业设计选题大全:微信小程序选题篇(新颖必过)
    一、前言......
  • 第5天:基础入门-APP应用&微信小程序&原生态开发&H5+Vue技术&封装打包&反编译抓包点
    #知识点1、基础入门-APP应用-开发架构安全问题2、基础入门-小程序应用-开发架构安全问题一、APP应用开发架构:1、原生开发安卓一般使用java语言开发,当然现在也有kotlin语言进行开发。如何开发就涉及到具体编程了,这里就不详说了。简单描述就是使用安卓提供的一系列......
  • vue+laravel使用微信Natvite支付
    Navite支付介绍Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。适用于PC网站、实体店单品或订单、媒体广告支付等场景1.先阅读微信支付接入前的准备文档文档连接:Native支付接入前准备2.php下载插件composerrequirewechatpay/we......
  • 微信小游戏sdk接入支付和登录,解决了wx原生不支持ios支付的痛点
    前情提要微信小游戏是小程序的一种。项目接入微信小游戏sdk的支付和登录。主要难点在于接入ios的支付。因为官方只支持android,不支持ios。即ios用户不能直接在小游戏中发起支付,参考市面上的wx小游戏,大都采用的是进入客服会话,客服发支付链接,ios玩家点击链接后拉起支付付款wx......