zoukankan      html  css  js  c++  java
  • MUI---上传头像功能实现

    这里使用MUI上传头像的功能是结合VUE来做的,所以:

    changeFace:function(){
        var IMAGE_UNSPECIFIED = "image/*"; //相册显示的文件类型
        var PHOTOZOOM = 2; // 获取完图片返回key
        var PHOTOLAT = 1; // 剪裁完毕后返回key
        var main = plus.android.runtimeMainActivity(); //h5+获取应用主Activity实例对象
        var Intent = plus.android.importClass("android.content.Intent");
        //导入java类intent对象  以下importClass都是使用安卓原生类
        var MediaStore = plus.android.importClass("android.provider.MediaStore");
        var File = plus.android.importClass("java.io.File");
        var Uri = plus.android.importClass("android.net.Uri");
        var intent = new Intent(Intent.ACTION_PICK, null);
        intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
        intent.putExtra("scale", true);
        intent.putExtra("scaleUpIfNeeded", true);
        var outPutPath = plus.io.convertLocalFileSystemURL("_www/head.jpg");
        main.startActivityForResult(intent, PHOTOZOOM);
        // uploadImgPath
        main.onActivityResult = (requestCode,resultCode,data)=>{
        // main.onActivityResult = function(requestCode, resultCode, data) {
            if (PHOTOZOOM == requestCode) {         
                var file = new File(outPutPath);
                // 输出目录uri
                var outPutUri = Uri.fromFile(file);
                if (data == undefined) {
                    return false;
                }
                plus.android.importClass(data);
                var uri = data.getData();
                var cropIntent = new Intent("com.android.camera.action.CROP"); //裁剪
                cropIntent.setDataAndType(uri, IMAGE_UNSPECIFIED);
                // 截图完毕后 输出目录
                cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, outPutUri);
                cropIntent.putExtra("crop", "true");
                //aspectX aspectY 是宽高的比例
                cropIntent.putExtra("aspectX", 1);
                cropIntent.putExtra("aspectY", 1);
                // outputX outputY 是裁剪图片宽高
                cropIntent.putExtra("outputX", 70);
                cropIntent.putExtra("outputY", 70);
                cropIntent.putExtra("return-data", true);
                main.startActivityForResult(cropIntent, PHOTOLAT);
            } else if (requestCode == PHOTOLAT) {
                if (data == undefined) {
                    return false;
                }
                var a = new File(outPutPath);
                if (!a.exists()) {
                    console.log(outPutPath);
                    mui.toast('裁剪错误');
                    return false;
                }
                this.uploadImgPath = outPutPath;
                console.log(outPutPath);
                alert(outPutPath);
                // img.src = outPutPath;
            };
        };
        // user/profile/update/
        var server = "";
        server = config.userProfileUpdate;
        var files = [];
        var upload_img = (p)=>{
            files = [];
            var n = p.substr(p.lastIndexOf('/')+1);
            files.push({name:"uploadkey"},{path:p});
            // 开始上传
            start_upload();
        };
        var start_upload = ()=>{
            if(files.length <= 0){
                plus.nativeUI.alert("没有添加上传文件");
                return;
            };
            // 原生的转圈等待框
            var wt = plus.nativeUI.showWaiting();
            var task = plus.uploader.createUpload(server,{methods:"POST"},(t,status){
                // 上传完成 
                alert(status);
                if(status == 200){
                    // 资源
                    var responseText = t.responseText;
                    // 转化为json
                    var json = eval('('+responseText+')');
                    // 上传文件的信息
                    var files = json.files;
                    // 上传成功以后的保存路径
                    var img_url = files.uploadkey.url;
                    alert(img_url);
                    // ajax 写入数据库
                    // 关闭转圈等待框
                    wt.close();
                }else{
                    console.log("上传失败:"+status);
                };
            });
            task.addData("client","");
            task.addData("uid",getUid()); // 每次都不同
            for(var i=0;i<files.length;i++){
                var f = files[i];
                task.addFile(f.path,{key:f.name});
            };
            task.start();// 执行到这里才会开始上传
        };
        // 产生一个随机数
        var getUid = (){
            return Math.floor(Math.random()*100000000+100000000).toString();
        };
        // main.onActivityResult = function(requestCode, resultCode, data) {
        //     if (PHOTOZOOM == requestCode) {
     
        //         var file = new File(outPutPath);
        //         // 输出目录uri
        //         var outPutUri = Uri.fromFile(file);
        //         if (data == undefined) {
        //             return false;
        //         }
        //         plus.android.importClass(data);
        //         var uri = data.getData();
        //         var cropIntent = new Intent("com.android.camera.action.CROP"); //裁剪
        //         cropIntent.setDataAndType(uri, IMAGE_UNSPECIFIED);
        //         // 截图完毕后 输出目录
        //         cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, outPutUri);
        //         cropIntent.putExtra("crop", "true");
        //         //aspectX aspectY 是宽高的比例
        //         cropIntent.putExtra("aspectX", 1);
        //         cropIntent.putExtra("aspectY", 1);
        //         // outputX outputY 是裁剪图片宽高
        //         cropIntent.putExtra("outputX", 70);
        //         cropIntent.putExtra("outputY", 70);
        //         cropIntent.putExtra("return-data", true);
        //         main.startActivityForResult(cropIntent, PHOTOLAT);
        //     } else if (requestCode == PHOTOLAT) {
        //         if (data == undefined) {
        //             return false;
        //         }
        //         var a = new File(outPutPath);
        //         if (!a.exists()) {
        //             console.log(outPutPath);
        //             mui.toast('裁剪错误');
        //             return false;
        //         }
        //         console.log(outPutPath);
        //         alert(outPutPath);
        //         // img.src = outPutPath;
        //     } 
        // }
        // this.showSelectFace = !this.showSelectFace;
        // this.selectFace = true;
        // this.mask = mui.createMask((res)=>{
        //     this.selectFace = false;
        // });
        // this.mask.show();
        // if (mui.os.plus) { 
        //     var a = [{ 
        //         title: "拍照" 
        //     },{ 
        //         title: "从手机相册选择" 
        //     }]; 
        //     plus.nativeUI.actionSheet({ 
        //         title: "修改用户头像", 
        //         cancel: "取消", 
        //         buttons: a 
        //     }, function(b) { /*actionSheet 按钮点击事件*/ 
        //         switch (b.index) { 
        //             case 0: 
        //                 break; 
        //             case 1: 
        //                 getImage(); /*拍照*/ 
        //                 break; 
        //             case 2: 
        //                 galleryImg();/*打开相册*/ 
        //                 break; 
        //             default: 
        //                 break; 
        //         } 
        //     }) 
        // };
        // 拍照
        function getImage() { 
            var c = plus.camera.getCamera(); 
            c.captureImage(function(e) { 
                plus.io.resolveLocalFileSystemURL(e, function(entry) { 
                    var s = entry.toLocalURL() + "?version=" + new Date().getTime(); 
                    uploadHead(s); /*上传图片*/ 
                }, function(e) { 
                    console.log("读取拍照文件错误:" + e.message); 
                }); 
            }, function(s) { 
                console.log("error" + s); 
            }, { 
                filename: "_doc/head.png" 
            }) 
        };
        // 本地相册
        function galleryImg() {
            // 从相册中选择图片
            console.log("从相册中选择图片");
            plus.gallery.pick(function(path){
                console.log(path);
            },function ( e ) {
                console.log( "取消选择图片" );
            }, {filter:"image"} );            
            // 从相册中选择图片 
            // plus.gallery.pick(function(a) { 
            //     plus.io.resolveLocalFileSystemURL(a, function(entry) { 
            //         plus.io.resolveLocalFileSystemURL("_doc/", function(root) { 
            //             root.getFile("head.png", {}, function(file) { 
            //                 //文件已存在 
            //                 file.remove(function() {
            //                     console.log("file remove success");
            //                     entry.copyTo(root, 'head.png', function(e) { 
            //                             var e = e.fullPath + "?version=" + new Date().getTime(); 
            //                             uploadHead(e); /*上传图片*/ 
            //                             //变更大图预览的src 
            //                             //目前仅有一张图片,暂时如此处理,后续需要通过标准组件实现 
            //                         }, 
            //                         function(e) {
            //                             console.log('copy image fail:' + e.message); 
            //                         }); 
            //                 }, function() { 
            //                     console.log("delete image fail:" + e.message); 
            //                 }); 
            //             }, function() { 
            //                 //文件不存在 
            //                 entry.copyTo(root, 'head.png', function(e) { 
            //                         var path = e.fullPath + "?version=" + new Date().getTime(); 
            //                         uploadHead(path); /*上传图片*/ 
            //                     }, 
            //                     function(e) { 
            //                         console.log('copy image fail:' + e.message); 
            //                     }); 
            //             }); 
            //         }, function(e) { 
            //             console.log("get _www folder fail"); 
            //         }) 
            //     }, function(e) { 
            //         console.log("读取拍照文件错误:" + e.message); 
            //     }); 
            // }, function(a) {}, { 
            //     filter: "image" 
            // }) 
        };            
        //上传头像图片 
        function uploadHead(imgPath) { 
            console.log("imgPath = " + imgPath); 
            mainImage.src = imgPath; 
            mainImage.style.width = "60px"; 
            mainImage.style.height = "60px";
            var image = new Image(); 
            image.src = imgPath; 
            image.onload = function() { 
                var imgData = getBase64Image(image);
                pc = new PhotoClip("#clipArea",{
                    size: [300, 300],//裁剪框大小
                    outputSize:[0,0],//打开图片大小,[0,0]表示原图大小
                    ok:"#clipBtn",
                    img: imgPath,
                    // 图片开始加载的回调函数。this 指向当前 PhotoClip 的实例对象,并将正在加载的 file 对象作为参数传入。(如果是使用非 file 的方式加载图片,则该参数为图片的 url)
                    loadStart:function(){},
                    // 图片加载完成的回调函数。this 指向当前 PhotoClip 的实例对象,并将图片的 <img> 对象作为参数传入。
                    loadComplete:function(){},
                    // 裁剪完成的回调函数。this 指向当前 PhotoClip 的实例对象,会将裁剪出的图像数据DataURL作为参数传入。
                    done:function(dataURL){
                        // 在这里调用上传接口
                        // mui.ajax("图片上传接口",{
                        //     data:{},
                        //     dataType:'json', 
                        //     type:'post', 
                        //     timeout:10000, 
                        //     success:function(data){console.log('上传成功');}, 
                        //     error:function(xhr, type, errorThrown){mui.toast("网络异常,请稍后重试!");}
                        // });
                    }
                });                    
            }
        };
        //将图片压缩转成base64 
        function getBase64Image(img) { 
            var canvas = document.createElement("canvas"); 
            var width = img.width; 
            var height = img.height; 
            // calculate the width and height, constraining the proportions 
            if (width > height) { 
                if (width > 100) { 
                    height = Math.round(height *= 100 / width); 
                    width = 100; 
                } 
            } else { 
                if (height > 100) { 
                    width = Math.round(width *= 100 / height); 
                    height = 100; 
                } 
            } 
            canvas.width = width;   /*设置新的图片的宽度*/ 
            canvas.height = height; /*设置新的图片的长度*/ 
            var ctx = canvas.getContext("2d"); 
            ctx.drawImage(img, 0, 0, width, height); /*绘图*/ 
            var dataURL = canvas.toDataURL("image/png", 0.8); 
            return dataURL.replace("data:image/png;base64,", ""); 
        };
    },
  • 相关阅读:
    【Tomcat】使用Eclipse发布项目时,项目启动路径错误。
    Unsupported major.minor version 52.0
    【转载】设置event.cancelBubble,使触发子元素的onclick不同时触发父元素的onclick
    【MG】测试
    【Tomcat】使用Eclipse运行Tomcat7源码
    【微信公众号】WeixinJSBridge.call('closeWindow')无效
    【微信公众号】使用a标签打开链接显示空白
    【JAVA】导出jar包时,Class files on classpath not found
    【JAVA】修改项目包名
    lesson3.1:java公平锁和非公平锁及读写锁
  • 原文地址:https://www.cnblogs.com/e0yu/p/10300135.html
Copyright © 2011-2022 走看看