zoukankan      html  css  js  c++  java
  • 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()
        //     }
        // });
    },
  • 相关阅读:
    [js开源组件开发]ajax分页组件
    使用nodejs+express+socketio+mysql搭建聊天室
    [js开源组件开发]图片放大镜
    JY游戏之毁经典《扫雷》
    JY游戏之手游《打卡乐猫》
    [js开源组件开发]图片懒加载lazyload
    [js开源组件开发]js文本框计数组件
    [js开源组件开发]js轮播图片支持手机滑动切换
    [js开源组件开发]js手机联动选择日期 开源git
    [js开源组件开发]-手机端照片预览组件
  • 原文地址:https://www.cnblogs.com/e0yu/p/10301003.html
Copyright © 2011-2022 走看看