mui+vue+photoclip做APP头像裁剪上传

做APP由于项目需要,需要做用户头像上传的功能,头像上传包括拍照和相册选择图片进行上传,这里使用的技术是mui封装的plus,在进行图片裁剪的时候,使用的是photoclip来进行裁剪,由于个人在使用mui自带的组件做图片上传比较麻烦,所以就采用了base64的图片做上传会比较简单,页面的渲染采用的VUE来进行双向数据绑定。

不说了,看代码:

changeFace:function(){
    this.selectFace = true;
    this.mask = mui.createMask((res)=>{
        this.selectFace = false;
    });
    this.mask.show();            
},
// 拍照
takingPictures:function(){            
    this.selectFace = false;
    this.mask.close();
    // 拍照
    var c = plus.camera.getCamera();
    c.captureImage((e)=>{
        plus.io.resolveLocalFileSystemURL(e,(entry)=>{
            var path = entry.toLocalURL() + "?version=" + new Date().getTime();
            console.log(path);
            this.cutOutPictures(path);
            // alert(imgPath);
        },(e)=>{
            console.log("读取拍照片文件错误:" + e.message);
        });
    },(s)=>{
        console.log("error:"+s);
    },{
        filename: "_doc/head.png"
    }); 
    // this.cutOutPictures();
    // console.log('takingPictures');
},
// 从相册中选择
selectFromalbum:function(){            
    this.selectFace = false;
    this.mask.close();
    // 从相册中选择图片
    console.log("从相册中选择图片");
    plus.gallery.pick((path)=>{
        console.log(path);
        this.cutOutPictures(path);
    },(e)=>{
        console.log("取消选择图片");
    },{filter:"image"});
    //console.log('selectFromalbum');
},
// 裁剪图片
cutOutPictures:function(imgSrc){
    var that = this;
    that.showSelectFace = true;
    var saveImg = (imgPath)=>{
        imgPath = imgPath.replace("data:image/jpeg;base64,", ""); 
        this.data = {avatar:imgPath};
        this.data = config.getParam(this.data);
        mui.post(config.userProfileUpdate,this.data,(res)=>{
            if(res.code == 200){
                config.userInfo.avatar = res.data.avatar;
                config.setStorage('userInfo',JSON.stringify(config.userInfo));
                mui.toast("头像修改成功");
            }else{
                mui.toast(res.msg);
            };
        });
    };
    var clipArea = new  PhotoClip("#clipArea", {
        size: [300, 300],//裁剪框大小
        outputSize:[0,0],//打开图片大小,[0,0]表示原图大小
        file: "#file",
        ok: "#clipBtn",
        // img: "http://127.0.0.1/ff.jpg",
        // img:'http://m3.biz.itc.cn/pic/new/n/50/14/Img5431450_n.jpg',
        // img:"file:///F:/MuiProject/domo6/images/music0.jpg",
        // img: "../images/music0.jpg",
        // img: "../images/huiyuan_03.jpg?version=124545487878",
        img:imgSrc,
        // 图片开始加载的回调函数。this 指向当前 PhotoClip 的实例对象,并将正在加载的 file 对象作为参数传入。(如果是使用非 file 的方式加载图片,则该参数为图片的 url)
        loadStart: function(){ 
            $(".loading").removeClass("displaynone");
        },
        // 图片加载完成的回调函数。this 指向当前 PhotoClip 的实例对象,并将图片的 <img> 对象作为参数传入。
        loadComplete: function() {
            $(".loading").addClass("displaynone");
        },
        // 裁剪完成的回调函数。this 指向当前 PhotoClip 实例对象,会将裁剪出的图像数据DataURL作为参数传入。
        done: function(dataURL){
            that.showSelectFace = false;
            saveImg(dataURL);
            // console.log(dataURL);//dataURL裁剪后图片地址base64格式提交给后台处理
            $(".clipbg").hide()
        }
    });
    $("#cancelBtn").on('tap',()=>{
        that.showSelectFace = false;
        $(".clipbg").hide();
    });
    // this.showSelectFace = true;
    // var clipArea = new  PhotoClip("#clipArea", {
    //     size: [300, 300],//裁剪框大小
    //     outputSize:[0,0],//打开图片大小,[0,0]表示原图大小
    //     file: "#file",
    //     ok: "#clipBtn",
    //     // img: "http://127.0.0.1/ff.jpg",
    //     // img:'http://m3.biz.itc.cn/pic/new/n/50/14/Img5431450_n.jpg',
    //     // img:"file:///F:/MuiProject/domo6/images/music0.jpg",
    //     img: "../images/music0.jpg",
    //     loadStart: function() { //图片开始加载的回调函数。this 指向当前 PhotoClip 的实例对象,并将正在加载的 file 对象作为参数传入。(如果是使用非 file 的方式加载图片,则该参数为图片的 url)
    //         $(".loading").removeClass("displaynone");
    //     },
    //     loadComplete: function() {//图片加载完成的回调函数。this 指向当前 PhotoClip 的实例对象,并将图片的 <img> 对象作为参数传入。
    //         $(".loading").addClass("displaynone");

    //     },
    //     done: function(dataURL) { //裁剪完成的回调函数。this 指向当前 PhotoClip 的实例对象,会将裁剪出的图像数据DataURL作为参数传入。            
    //         console.log(dataURL);//dataURL裁剪后图片地址base64格式提交给后台处理
    //         $(".clipbg").hide()
    //     }
    // });
},

 

posted @ 2019-01-21 21:05  帅到要去报警  阅读(1193)  评论(0编辑  收藏  举报