微信小程序> 处理微信小程序上传头像裁剪功能。

处理微信小程序上传头像裁剪功能。

浏览量:494 时间: 来源:weixin_30902675

这里使用的是开源是的插件,做的很不错 https://github.com/we-plugin/we-cropper.git

git下来之后,如果急着使用效果。可以直接到example目录下 把we-cropper文件夹直接放在自己的小程序项目中,现在我使用的是照片裁剪上传的功能。

所以需要两个页面来共同完成。

A页面 展示修改裁剪后照片的页面 ,B 页面的原来实现裁剪功能的页面。

A页面的代码 :通过事件出发获取相册的api后,拿到图片地址,携带地址跳转到B页面

wx.chooseImage({    count: 1,//选择数量    sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有    sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有    success: function(res) {    // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片            const src = res.tempFilePaths[0]            wx.redirectTo({               url: `../B/B?src=${src}`,            })    },})——————————————————————————————————————B 页面的wxml :import src="../../we-cropper/we-cropper.wxml"/view class="cropper-wrapper"template is="we-cropper" data="{{...cropperOpt}}"/view class="cropper-buttons"viewclass="upload"bindtap="uploadTap"重新选择/viewviewclass="getCropperImage"bindtap="getCropperImage"确定/view/view/view————————————————————————————————B页面的css:@import "../../style/common.wxss";page{height: 100%}.cropper{position: absolute;top: 0;left: 0;}
.cropper-buttons{    "rgba(0, 0, 0, 0.95);    color: #04b00f;}————————————————————————————————————B页面的js   关键的页面 import WeCropper from '../../we-cropper/we-cropper.js'
const device = wx.getSystemInfoSync()const width = device.windowWidthconst height = device.windowHeight - 50
Page({  data: {    cropperOpt: {      id: 'cropper',      width,      height,      scale: 2.5,      zoom: 8,      cut: {        x: (width - 300) / 2,        y: (height - 300) / 2,        width: 300,        height: 300      }    }  },  touchStart(e) {    this.wecropper.touchStart(e)  },  touchMove(e) {    this.wecropper.touchMove(e)  },  touchEnd(e) {    this.wecropper.touchEnd(e)  },//这个是保存上传裁剪后的图片的方法  getCropperImage() {    var that = this    this.wecropper.getCropperImage((avatar) = {      if (avatar) {        uploadImage(avatar, function (res) { })        function uploadImage(filePath, cb) {   //个人封装的简单的上传单张图片上传的方法          wx.uploadFile({            url: “xxx/xx/xx”,            filePath: filePath,            name: 'file',            header: {              "Content-Type": "multipart/form-data"            },            formData: {              token: getApp().globalData.userData.token,              userName: "",              portrait: filePath            },            success: function (res) {              //  获取到裁剪后的图片              wx.switchTab({                url: `../A/A?avatar=${avatar}`   如果需要这图片地址就传过去 ,因为我上传后跳转页面后会自己获取服务器的是地址了。这里仅提供思路参考。              })              console.log('上传图片成功')              console.log(res);              wx.showToast({                title: '上传成功',              })              cb(res);            },            fail: function (res) {              console.log('上传图片失败!')              console.log(res)              wx.showToast({                title: '上传失败',              })            },          })        }       } else {        console.log('获取图片失败,请稍后重试')      }    })  },  uploadTap() {    const self = this
   wx.chooseImage({      count: 1, // 默认9      sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有      sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有      success(res) {        const src = res.tempFilePaths[0]        //  获取裁剪图片资源后,给data添加src属性及其值
       self.wecropper.pushOrign(src)      }    })  },  onLoad(option) {    const { cropperOpt } = this.data
   if (option.src) {      cropperOpt.src = option.src      new WeCropper(cropperOpt)        .on('ready', (ctx) = {          console.log(`wecropper is ready for work!`)        })        .on('beforeImageLoad', (ctx) = {          console.log(`before picture loaded, i can do something`)          console.log(`current canvas context:`, ctx)          wx.showToast({            title: '上传中',            icon: 'loading',            duration: 20000          })        })        .on('imageLoad', (ctx) = {          console.log(`picture loaded`)          console.log(`current canvas context:`, ctx)          wx.hideToast()        })        .on('beforeDraw', (ctx, instance) = {          console.log(`before canvas draw,i can do something`)          console.log(`current canvas context:`, ctx)        })        .updateCanvas()    }  }})——————————————————————————————————————————这里只是写了的上传头像裁剪的功能,其他的还有常规的的,裁剪网络图,图片添加水印,局部裁剪的功能。有兴趣可以在example目录夹下有对应的源码小程序小程序

 

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎