1. 程式人生 > >微信小程式相機元件wx.createCameraContext()的使用模擬微信拍照-後端為nodejs

微信小程式相機元件wx.createCameraContext()的使用模擬微信拍照-後端為nodejs

//index.js
//獲取應用例項
let app = getApp();
let wechat = require("../../utils/wechat");
Page({
  data: {
    device: true,
    tempImagePath: "", // 拍照的臨時圖片地址
    tempThumbPath: "", // 錄製視訊的臨時縮圖地址
    tempVideoPath: "", // 錄製視訊的臨時視訊地址
    camera: false,
    ctx: {},
    type: "takePhoto",
    startRecord: false,
    time: 0,
    timeLoop: "",
  },
  onLoad() {
    this.setData({
      ctx: wx.createCameraContext()
    })
  },
  // 切換相機前後置攝像頭
  devicePosition() {
    this.setData({
      device: !this.data.device,
    })
    console.log("當前相機攝像頭為:", this.data.device ? "後置" : "前置");
  },
  camera() {
    let { ctx, type, startRecord } = this.data;
    // 拍照
    if (type == "takePhoto") {
      console.log("拍照");
      ctx.takePhoto({
        quality: "normal",
        success: (res) => {
          // console.log(res);
          this.setData({
            tempImagePath: res.tempImagePath,
            camera: false,
          });
          wechat.uploadFile("https://xx.xxxxxx.cn/api/upload", res.tempImagePath, "upload")
            .then(d => {
              console.log(d);
            })
            .catch(e => {
              console.log(e);
            })
        },
        fail: (e) => {
          console.log(e);
        }
      })
    }
    // 錄視訊
    else if (type == "startRecord") {
      if (!startRecord) {
        console.log("開始錄視訊");
        this.setData({
          startRecord: true
        });
        // 30秒倒計時
        let t1 = 0;
        let timeLoop = setInterval(() => {
          t1++;
          this.setData({
            time: t1,
          })
          // 最長錄製30秒
          if (t1 == 30) {
            clearInterval(timeLoop);
            this.stopRecord(ctx);
          }
        }, 1000);
        this.setData({
          timeLoop
        })
        // 開始錄製
        ctx.startRecord({
          success: (res) => {
            console.log(res);
          },
          fail: (e) => {
            console.log(e);
          }
        })
      }
      else {
        this.stopRecord(ctx);
      }
    }
  },
  // 停止錄製
  stopRecord(ctx) {
    console.log("停止錄視訊");
    clearInterval(this.data.timeLoop);
    ctx.stopRecord({
      success: (res) => {
        this.setData({
          tempThumbPath: res.tempThumbPath,
          tempVideoPath: res.tempVideoPath,
          camera: false,
          startRecord: false,
          time: 0
        });
        wechat.uploadFile("https://xx.xxxxxx.cn/api/upload", res.tempThumbPath, "tempThumbPath")
          .then(d => {
            console.log(d);
            return wechat.uploadFile("https://xx.xxxxxx.cn/api/upload", res.tempVideoPath, "tempVideoPath")
          })
          .then(d => {
            console.log(d);
          })
          .catch(e => {
            console.log(e);
          })
      },
      fail: (e) => {
        console.log(e);
      }
    })
  },
  // 開啟模擬的相機介面
  open(e) {
    let { type } = e.target.dataset;
    console.log("開啟相機準備", type == "takePhoto" ? "拍照" : "錄視訊");
    this.setData({
      camera: true,
      type
    })
  },
  // 關閉模擬的相機介面
  close() {
    console.log("關閉相機");
    this.setData({
      camera: false
    })
  }
})

相關推薦

程式相機元件wx.createCameraContext()的使用模擬拍照-nodejs

//index.js //獲取應用例項 let app = getApp(); let wechat = require("../../utils/wechat"); Page({ data: { device: true, tempImagePath: "", // 拍照的臨時圖片地址

程式----map元件實現(高德地圖API實現wx.chooseLocation(OBJECT))

宣告 bug: 頁面搜尋返回的列表在真機測試是會出現不顯示問題? 造成原因:在小程式map元件的同一區域,map元件的檢視層比普通的文字檢視層要高,所以在真機會遮擋! 解決辦法:將該文字檢視採用c

程式 基礎元件

基礎元件 框架為開發者提供了一系列基礎元件,開發者可以通過組合這些基礎元件進行快速開發。 什麼是元件: 元件是檢視層的基本組成單元。 元件自帶一些功能與微信風格的樣式。 一個元件通常包括開始標籤和結束標籤,屬性用來修飾這個元件,內容在兩個標籤之內。<tagname

程式——父子元件傳參以及方法的呼叫

父元件向子元件傳參 A元件為父元件,B元件為子元件,以下是A元件向B元件傳參 在A元件中引入B元件(父元件引入子元件) 在A元件的json中寫入(父元件): { "component": true, "usingComponents": { "com

程式 picker元件運用物件陣列

官方文件 https://developers.weixin.qq.com/miniprogram/dev/component/picker.html wxml: <view class='input-box flexac'> <text>積分抵扣

Wuss Weapp 一款高質量,元件齊全,高自定義的程式 UI 元件

Wuss Weapp 一款高質量,元件齊全,高自定義的微信小程式 UI 元件庫 文件 https://phonycode.github.io/wuss-weapp 掃碼體驗 使用微信掃一掃體驗小程式元件示例 演示圖片 快速上手 在開始使用 Wuss We

程式——switch元件設定大小

附上switch元件的文件地址 https://developers.weixin.qq.com/miniprogram/dev/component/switch.html 如上圖,官方文件沒有給出如何修改switch元件大小的值,只給出修改顏色的值,接下來就讓我們來解決修改

程式textarea元件

textarea 多行輸入框。該元件是原生元件,使用時請注意相關限制。 屬性名 型別 預設值 說明 最低版本 value String   輸入框

程式picker元件

picker 從底部彈起的滾動選擇器,現支援五種選擇器,通過mode來區分,分別是普通選擇器,多列選擇器,時間選擇器,日期選擇器,省市區選擇器,預設是普通選擇器。 普通選擇器:mode = selector 屬性名 型別 預設值

程式元件之頁面佈局

小程式的flex佈局 小程式建議使用flex佈局進行排版 flex就是一個盒裝彈性佈局 flex是一個容器,所有子元素都是它的成員。 定義佈局:display:flex flex 容器的屬性: 1、屬性flex-direction: 排列方向。有下面

5個最優秀的程式UI元件

開發微信小程式的過程中,選擇一款好用的元件庫,可以達到事半功倍的效果。自從微信小程式面世以來,不斷有一些開源元件庫出來,下面5款就是排名比較靠前,使用者使用量與關注度比較高的小程式UI元件庫。還沒用到它們的你,可以關注和了解一下哦! WeUI WXSS WeUI WXSS是騰訊官方UI元件庫

開發者工具--開啟程式weui元件示例

瀏覽器搜尋 :https://github.com/Tencent/weui-wxss/ 1.下載為小程式設計的weui元件, 2.在開發者工具中開啟dist目錄,而不是整個目錄, 在開發者工具中就可以預覽weui元件的示例了。   如果想在自己專案中引用weui元件,需要

程式條件渲染-- wx:if 與 hidden區別

條件渲染 顧名思義所謂的條件渲染,就是通過條件來判斷是否需要渲染該程式碼塊。 條件渲染主要是用到wx:if 和 block wx:if 這兩個, 第一個相信好理解,第二個是在block裡面進行條件渲染,這裡我們特別說明一下< block/>並不是一個元件,它僅

程式內容元件圖示 icon,打勾

    <view class="group">       <block wx:for="{{iconSize}}">         <icon type="success"

程式元件的業務)slot 的使用

1.呼叫元件向自定義元件插入內容,使用  slot 在自定義模板中有一對<view><slot></slot></view>,這裡是幹什麼用的呢?在元件模板中可以提供一個 <slot> 節點,用於承載元件引用時提供的子節點。

程式元件中的使用)observer函式的應用

小程式observer函式的應用   需求是這樣的 就是構建月份的元件中,月份小於10月的時候 顯示的數字都是一個位數,需要轉換成兩位數, 比如8月份是8 ,那就要轉換為08 ,同理可得 其他低於十月份的月份也是要這樣做: 開啟元件的js檔案 接下來看下程式碼: p

程式map元件bindmarkertap事件點選無效

今天做小程式遇到了map元件上任何事件都不起作用,無法執行函式。 貼出可能解決的辦法: 1、<map> 元件需要設定ID,雖然小程式map元件不是強制要填,但不填可能會有一些問題 2、marker 一定要有id,這個id一定是有效的,不能為空。這個是最重要的 3、設一下marker的層

程式使用元件實現移動軟鍵盤

效果圖如上,這是一個簡單的 新增牌照的功能,因為鍵盤內容需要自己定義,就自己製作了一個響應的軟鍵盤, 有中文鍵盤和 字母數字鍵盤。點選ABC按鍵可以切換,刪除按鍵可以刪除輸入的內容, 新能源車牌和普通車牌也可以切換。 demo使用了微信小程式的自定義元件,相似的功能也可以拿過去改一

程式元件用法與傳統HTML5標籤的區別

小程式與傳統HTML5的區別 小程式剛開放公測,網際網路圈內開始了各種解讀和猜測。其中有觀點認為小程式和HTML5有著緊密關聯,甚至小程式就是基於HTML5開發。 經過仔細研究文件和程式碼開發,從檢視層的角度來說,小程式與傳統HTML5還是有明顯的區別,主要區別在於:

程式元件實踐

前階段有網友問了一個關於小程式元件的問題: 有一個列表,我點選編輯,出現一個彈窗修改元件,輸入修改數值點選確定,對應的列表項的值就被更改過來,點選取消,不做任何操作。 據說能獲取到文字框的值,可是列表值一直更改不了。我就抽空寫了個demo發現並未出現