小程序模板網(wǎng)

微信小程序?qū)崿F(xiàn)拍照界面自定義實現(xiàn)

發(fā)布時間:2020-05-14 10:09 所屬欄目:小程序開發(fā)教程

最近有一個項目需要對拍照界面進(jìn)行自定義,之前使用的是html寫的項目界面,但是在html中想要自定義拍照界面十分的困難,于是想到了使用微信小程序來實現(xiàn)拍照界面的自定義

在微信小程序中實現(xiàn)自定義拍照功能主要使用到如下的組件和API

1:camera組件

常見的屬性有:

(1):mode

應(yīng)用模式,只在初始化時有效,不能動態(tài)變更,參數(shù)有:normal(相機模式),scanCode(掃碼模式) ,默認(rèn)為normal

(2):device-position

攝像頭朝向,參數(shù)有front(前置),back(后置),默認(rèn)為back

(3):flash

閃關(guān)燈,參數(shù)有:auto(自動,手機相機目前的閃光燈狀態(tài)), on(打開閃光燈), off(關(guān)閉閃光燈),默認(rèn)為auto

(4):binderror

用戶不允許使用攝像頭時觸發(fā)事件

例如:

<camera device-position="back" flash="off" >  
</camera>  

2:拍攝照片API(CameraContext.takePhoto)

參數(shù)說明:

(1)quality

成像質(zhì)量,參數(shù)有:high(高質(zhì)量),normal(普通質(zhì)量),low(低質(zhì)量),默認(rèn)為normal

(2)success

接口調(diào)用成功的回調(diào)函數(shù)

(3)fail

接口調(diào)用失敗的回調(diào)函數(shù)

例如:

//拍攝照片  
wx.createCameraContext().takePhoto({  
  quality: 'high',//拍攝質(zhì)量(high:高質(zhì)量 normal:普通質(zhì)量 low:高質(zhì)量)  
  success: (res) => {  
    //拍攝成功  
    //照片文件的臨時文件  
    var file = res.tempImagePath;  
  },  
  fail: (res) => {  
    //拍攝失敗  
  },  
})  

3:上傳拍照文件API(uploadFile)

參數(shù)說明:

url:上傳文件的服務(wù)器地址

filePath:要上傳文件資源的路徑 (本地路徑)

name:文件對應(yīng)的 key,開發(fā)者在服務(wù)端可以通過這個 key 獲取文件的二進(jìn)制內(nèi)容

formData:HTTP 請求中其他額外的參數(shù)

success:接口調(diào)用成功的回調(diào)函數(shù)

fail:接口調(diào)用失敗的回調(diào)函數(shù)

例如:

wx.chooseImage({  
  success (res) {  
    const tempFilePaths = res.tempFilePaths  
    wx.uploadFile({  
      url: 'https://example.weixin.qq.com/upload', //僅為示例,非真實的接口地址  
      filePath: tempFilePaths\[0\],  
      name: 'file',  
      formData: {  
        'user': 'test'  
      },  
      success: (res) => {  
        //上傳成功  
      },  
      fail: function(t) {  
        //上傳失敗  
    },  
    })  
  }  
})  

4:根據(jù)如上我們就可以實現(xiàn)在微信小程序中自定義拍照頁面來實現(xiàn)上傳

(1):wxml端:

<!--pages/web/index.wxml-->  
<camera binderror="handleCameraError" device-position="{{devicePosition}}" flash="off"  wx:if="{{authCamera}}">  
<cover-view>  
    <cover-image class="line" src="/images/outline.png"></cover-image>  
</cover-view>  
</camera>  
<button type="primary" bindtap="takePhoto">拍照</button>  
<button type="primary" bindtap="reverseCamera">攝像頭切換</button>  
<view class="error-handler" wx:if="{{!authCamera}}">  
    <button class="nobtn" openType="openSetting">打開相機授權(quán)</button>  
</view>  

(2):js端

// pages/web/index.js  
Page({  
  /\*\*  
   \* 頁面的初始數(shù)據(jù)  
   \*/  
  data: {  
    devicePosition:'back',  
    authCamera: false,//用戶是否運行授權(quán)拍照  
  },  
  handleCameraError:function() {  
    wx.showToast({  
      title:'用戶拒絕使用攝像頭',  
      icon: 'none'  
    })  
  },  
  reverseCamera:function(){  
    this.setData({  
      devicePosition: "back" === this.data.devicePosition ? "front" : "back"  
  });  
  },  
  takePhoto:function() {  
    //拍攝照片  
    wx.createCameraContext().takePhoto({  
      quality: 'high',//拍攝質(zhì)量(high:高質(zhì)量 normal:普通質(zhì)量 low:高質(zhì)量)  
      success: (res) => {  
        //拍攝成功  
        //照片文件的臨時文件  
        var file = res.tempImagePath;  
        console.log(file)  
        //上傳圖片到服務(wù)器  
        wx.uploadFile({  
          url: 'XXXX', //上傳服務(wù)器地址  
          filePath: file,  
          name: 'file',  
          formData: {  
            'test': 'test'  
          },  
          success: (res) => {  
            //上傳成功  
          },  
          fail: function(t) {  
            //上傳失敗  
          },  
        })  
      },  
      fail: (res) => {  
        //拍攝失敗  
      },  
    })  
  },  
  /\*\*  
   \* 生命周期函數(shù)--監(jiān)聽頁面顯示  
   \*/  
  onShow: function () {  
    wx.getSetting({  
      success: (res) => {  
          if (res.authSetting\["scope.camera"\]) {  
              this.setData({  
                authCamera:true,  
              })  
          } else {  
            this.setData({  
              authCamera:false,  
            })  
          }  
      }  
    });  
  },  
})  

具體相信如下:

 

在接口處理上傳文件的流程和正常的表單上傳文件流程相同,這里就不多敘述了


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.u-renovate.com/wxmini/doc/course/25167.html 復(fù)制鏈接 如需定制請聯(lián)系易優(yōu)客服咨詢:800182392 點擊咨詢
QQ在線咨詢
AI智能客服 ×