最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 微信小程序——拍照、压缩转换base64(不留存照片在本地相册)

    正文概述 掘金(允乐51939)   2020-11-26   641

    前言

    通常使用wx.chooseImage这个api去拍照时通常会留下照片在本地相册,在一些需求情况下不需要留存照片所以在这里我们使用另一个wx.createCameraContext()

    展示效果

    微信小程序——拍照、压缩转换base64(不留存照片在本地相册)

    js

    var compress = require('../../../../libs/compress.js');
    const app = getApp()
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        showCamera: false,
        ctx: null, //拍照实例
        device: 'back',
    	Img1:''
      },
    
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
        this.setData({
          ctx: wx.createCameraContext()
        }); //初始化相机实例
      },
      
      //拍照
      takePhotoZ: function () {
        let maxSize = 400;
        let dWidth = wx.getSystemInfoSync().windowWidth;
        let that = this;
        that.data.ctx.takePhoto({
          quality: 'normal',
          success: (res) => {
            console.log(res)
            var v = res.tempImagePath
            wx.getFileInfo({
              filePath: res.tempImagePath,
              success: function (res) {
                var cW = res.width, cH = res.height;
                that.cWidth = cW;
                that.cHeight = cH;
              }
            })
            console.log(res)
            compress.getLessLimitSizeImage('canvas', v, maxSize, dWidth, function (img) {
              wx.getFileInfo({
                filePath: img,
                success: function (res) {
                  console.log('压缩后:' + res.size / 1024 + 'kb')
                  var FSM = wx.getFileSystemManager();
                  FSM.readFile({
                    filePath: img,
                    encoding: "base64",
                    success: (data) => {
                      let Working = data.data;
                      that.getBase64ImageUrlF2(Working, that.data.index)
                    }
                  });
                }
              })
            })
          },
          fail: (res) => {
          },
          complete: (res) => { },
        });
      },
    
      //身份证压缩
      chooseImgF2(e) {
        var index = e.currentTarget.dataset.index
        let maxSize = 400;
        let dWidth = wx.getSystemInfoSync().windowWidth;
        console.log(dWidth);
        let that = this;
        wx.chooseImage({
          sizeType: ['compressed'],
          sourceType: ['album', 'camera'],
          count: 1,
          success: function (res) {
            wx.showLoading({
              title: '加载中',
              mask: true
            })
            // 返回选定图片的本地文件列表,tempFilePaths可以作为img标签的src列表
            // 当一次选择多张图片的情况
            var v = res.tempFilePaths[0]
            wx.getFileInfo({
              filePath: res.tempFilePaths[0],
              success: function (res) {
                var cW = res.width, cH = res.height;
                that.cWidth = cW;
                that.cHeight = cH;
              }
            })
            compress.getLessLimitSizeImage('canvas', v, maxSize, dWidth, function (img) {
              wx.getFileInfo({
                filePath: img,
                success: function (res) {
                  console.log('压缩后:' + res.size / 1024 + 'kb')
                  var FSM = wx.getFileSystemManager();
                  FSM.readFile({
                    filePath: img,
                    encoding: "base64",
                    success: (data) => {
                      let Working = data.data;
                      console.log(index)
                      that.getBase64ImageUrlF2(Working, index)
                    }
                  });
                }
              })
            })
          },
          fail: function (err) {
            console.log(err)
          }
        })
      },
    
      getBase64ImageUrlF2: function (res, index) {
        var index = index
        var base64Data = res;
        base64Data = wx.arrayBufferToBase64(wx.base64ToArrayBuffer(base64Data));
        var imgUrl = `data:image/png;base64,${base64Data}`
        var eqTagIndex = imgUrl.indexOf("=");
        imgUrl = eqTagIndex != -1 ? imgUrl.substring(0, eqTagIndex) : imgUrl;
        var strLen = imgUrl.length;
        var fileSize = strLen - (strLen / 8) * 2
        console.log(fileSize + '大小')
        this.setData({
          showCamera: false,
          Img1: `${base64Data}`,
        })
        console.log(this.data.Img1)
      },
    
    
    
    
      toPhoto: function (e) {    //打开摄像头
        this.setData({
          showCamera: true,
          index: e.currentTarget.dataset.index
        })
      },
    
      close: function () { //关闭摄像机
        this.setData({
          showCamera: false
        })
      },
    
      changeCamera: function () {    //切换摄像头
        if (this.data.device == 'front') {
          this.setData({
            device: 'back'
          })
        }
        else {
          this.setData({
            device: 'front'
          })
        }
      }
    
    })
    

    wxml

    <view class="flxc aic box" wx:if="{{!showCamera}}">
    	<view class="idbox width100" bindtap="toPhoto" data-index="1">
    		<view class="backblue width100 flxc aic jcc">
    			<image wx:if="{{Img1==''}}" src="/packageB/imageB/front.png" style="width:364rpx;height:228rpx"></image>
    			<image wx:else src="{{Img1}}" style="width:364rpx;height:228rpx"></image>
    		</view>
    	</view>
    </view>
    
    <camera class="height100 width100" device-position="{{device}}" wx:if="{{showCamera}}" flash="off">
    	<cover-image class="cover-1" src="/packageB/imageB/btn_change.png" bindtap="changeCamera"></cover-image>
    	<cover-image class="cover-3" src="/packageB/imageB/btn_shot.png" bindtap="takePhotoZ" data-index="1"></cover-image>
    	<cover-image class="cover-2" src="/packageB/imageB/btn_donwarrow.png" bindtap="close"></cover-image>
    </camera>
    

    compress.js

    下载链接compress,js

    总结

    一点点小的经验分享


    起源地下载网 » 微信小程序——拍照、压缩转换base64(不留存照片在本地相册)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元