jijinduoduo
jijinduoduo
  • 发布:2016-06-08 14:45
  • 更新:2018-04-19 22:45
  • 阅读:4276

安卓,图片裁剪上传真机测试好使,打包后显示:无法保存裁剪的图像

分类:HBuilder
            var IMAGE_UNSPECIFIED = "image/*";  
            var PHOTOZOOM = 2; // 获取完图片返回key  
            var PHOTOLAT = 1; // 剪裁完毕后返回key  
            var main;  
            var Intent;  
            var MediaStore;  
            var File;  
            var Uri;  
            var wt;  
            var task;  
            var outPutPath;//图片路径  

            //临时的服务区位置  
            // 上传文件  
            function upload(fullurl) {  
                if(!fullurl){  
                    return;  
                }  
                document.getElementById('image-list').innerHTML = '<img src="' + fullurl + '">';  
                wt = plus.nativeUI.showWaiting();  
                task = plus.uploader.createUpload(GV['URL']['AJAX'] + 'huodongtupian.php', //服务端的URL  
                    {  
                        method: "POST"  
                    },  
                    function(t, status) { //上传完成  
                        if (status == 200) {  
                            //到时候把t.responseText解析成json就好  
                            var dt = JSON.parse(t.responseText);  
                            if (dt.error == 0) {  
                                //                          sdk.obj('authorimg').src=dt.data.avatar;  
                                //                          mui.fire(plus.webview.getWebviewById('person/index.html'),'selfCallBack',null);  
                                wt.close();  
                                gid('fenmian').value = dt.files;  
                                plus.nativeUI.toast('上传成功');  
                            }  
                        } else {  
                            plus.nativeUI.toast('上传失败');  
                            wt.close();  
                        }  
                    }  
                );  
                task.addFile(fullurl, {  
                    key: 'avatar'  
                });  
                //           task.addData("user_logo",global.getStorage('user_logo'));  
                task.start();  
            }  

            // 从相册中选择图片,并裁剪  
            function galleryImg() {  
                var intent = new Intent(Intent.ACTION_PICK, null);  
                intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);  
                console.log(intent);  
                main.startActivityForResult(intent, PHOTOZOOM);  
                //            

                main.onActivityResult = function(requestCode, resultCode, data) {  
                    if (PHOTOZOOM == requestCode) {  
                        //输出的文件目录   
                        outPutPath = plus.io.convertLocalFileSystemURL("_downloads/images/5"+parseInt(Math.random()*(99999-10000+1)+1000)+".jpg");  
                        var file = new File(outPutPath);  
                        // 输出目录uri  
                        var outPutUri = Uri.fromFile(file);  
                        plus.android.importClass(data);  
                        var uri = data.getData();  
                        console.log("uri:" + uri);  
                        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", 40);  
                        cropIntent.putExtra("aspectY", 55);  
                        // outputX outputY 是裁剪图片宽高  
                        cropIntent.putExtra("outputX", 400);  
                        cropIntent.putExtra("outputY", 550);  
                        cropIntent.putExtra("return-data", true);  
                        main.startActivityForResult(cropIntent, PHOTOLAT);  
                    } else if (requestCode == PHOTOLAT) {  
                        // 判断 剪裁完后的图片输出是否存在  
//                                   var _file = new File(outPutPath);  
//                                       sdk.obj('authorimg').src=outPutPath;  
//                     console.log(outPutPath);  
                        //这里是否存在的判断还是需要的  
//                                     var a = _file.exists();  
                        //查看本地是否有缓存图片 进行删除  
                        //                  _file.remove( function ( entry ) {  
                        //                          plus.console.log( "Remove succeeded" );  
                        //                      }, function ( e ) {  
                        //                          alert( e.message );  
                        //                  });  
                        //压缩图片  
                        //                  plus.zip.compressImage({  
                        //                          src:outPutPath,  
                        //                          dst:"_doc/header.jpg",  
                        //                          quality:20  
                        //                      },  
                        //                      function() {  
                        //                          alert("Compress success!");  
                        //                      },function(error) {  
                        //                          alert("Compress error!");  
                        //                  });  
                        //上传头像->然后进行处理,上传完毕之后 需要删除头像图片  
                        // 判断 剪裁完后的图片输出是否存在  
                                    var _file = new File(outPutPath);  
                                         var a = _file.exists();  
                        if(a){  
                                upload(outPutPath);  
                        }else{  
                            mui.toast('上传失败')  
                        }  

                    }  
                };  
            }  
            //拍照获取  
            function getImage() {  
                //开始拍照  
                var cmr = plus.camera.getCamera();  
                cmr.captureImage(function(p) {  
                    //拍照成功调用的函数  
                    plus.io.resolveLocalFileSystemURL(p, function(entry) {  
                        //                  upload(entry.toLocalURL());  
                        //                  plus.zip.compressImage({  
                        //                          src:entry.toLocalURL(),  
                        //                          dst:"_doc/a.jpg",  
                        //                          clip:{top:"25%",left:"25%",width:"50%",height:"50%"}        // 裁剪图片中心区域  
                        //                      },  
                        //                      function() {  
                        //                          alert("Compress success!");  
                        //                      },function(error) {  
                        //                          alert("Compress error!");  
                        //                  });  
                        //裁剪  
                        outPutPath = plus.io.convertLocalFileSystemURL("_downloads/images/5"+parseInt(Math.random()*(99999-10000+1)+1000)+".jpg");  
                        var file = new File(outPutPath);  
                        // 输出目录uri  
                        var outPutUri = Uri.fromFile(file);  
                        //拍照回来的绝对路径  
                        var path = entry.toLocalURL();  
                        //去掉\\或者file://  
                        path = path.replace("\\", "");  
                        path = path.replace("file://", "");  
                        var _file = new File(path);  
                        var a = _file.exists();  
//                      alert(a);  
                        //绝对路径转uri  
                        var curCropUri = Uri.fromFile(new File(path));  
                        console.log("uri:" + curCropUri);  
                        //裁切  
                        var cropIntent = new Intent("com.android.camera.action.CROP");  
                        cropIntent.setDataAndType(curCropUri, IMAGE_UNSPECIFIED);  
                        // 截图完毕后 输出目录  
                        cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, outPutUri);  
                        cropIntent.putExtra("crop", "true");  
                        // aspectX aspectY 是宽高的比例  
                        cropIntent.putExtra("aspectX", 40);  
                        cropIntent.putExtra("aspectY", 55);  
                        // outputX outputY 是裁剪图片宽高  
                        cropIntent.putExtra("outputX", 64);  
                        cropIntent.putExtra("outputY", 64);  
                        cropIntent.putExtra("return-data", true);  
                        main.startActivityForResult(cropIntent, 1);  
                        main.onActivityResult = function(requestCode, resultCode, data) {  
                            //裁剪成功图片上传  
//                          upload(outPutPath);  
//                                      // 判断 剪裁完后的图片输出是否存在  
                                    var _file2 = new File(outPutPath);  
                                           console.log(outPutPath);  
                                     var a2 = _file2.exists();  
//                                          alert(a2);  
                        if(a2){  
                                upload(outPutPath);  
                        }else{  
                            mui.toast('上传失败')  
                        }  
                        };  
                        //上传  
                    }, function(e) {  
                        console.log("读取拍照文件错误:" + e.message);  
                    });  
                }, function(e) {  
                    console.log("失败:" + e.message);  
                }, {  
                    filename: "_doc/camera/",  
                    index: 1  
                });  
            }  
            //图片点击处理  
            function showActionSheet() {  
//              alert(outPutPath);  
                var bts = [{  
                    title: "本地相册",  
                    style: "destructive"  
                }, {  
                    title: "拍照"  
                }]; //暂时不支持{title:"拍照"}  
                plus.nativeUI.actionSheet({  
                        cancel: "取消",  
                        buttons: bts  
                    },  
                    function(e) {  
                        if (e.index == 1) {  
                            //1 本地相册,包括裁剪  
                            galleryImg();  
                        } else if (e.index == 2) {  
                            //2 拍照  
                            getImage();  
                        } else {  
                            //3 取消  
                        }  
                    }  
                );  
            }
2016-06-08 14:45 负责人:无 分享
已邀请:
2***@qq.com

2***@qq.com - java工程师

我也遇到这个情况了,不知道你解决了吗?

2***@qq.com

2***@qq.com - java工程师

今天各种调试,找到问题了。
问题:真机测试的时候压缩剪裁图片正常,但是打包apk安装后,就无法剪裁了。提示code:-5,message:输出图片失败
解决:
是我的手机设置的dst目录,不知道为什么,测试的时候可以保存到dst目录,但是打包apk后就不可以了,因此想了个办法,把传过来的图片地址替换下文件名,用原图片的路径保存后就好了
代码片段如下:
var dst = image.src.replace(/head.jpg/g, fullname);
// var dst = "../doc/"+fullname;
var imgOption = {src:image.src, //原始图片路径
dst: dst,
//(String 类型 )压缩转换目标图片的路径,这里保存到 私有目录doc
//如“/sdcard/Android/data/io.dcloud.HBuilder/.HBuilder/apps/HBuilder/doc”。
overwrite:true, //覆盖生成新文件
format: '',//(String 类型 )压缩转换后的图片格式,支持"jpg"、"png",如果未指定则使用源图片的格式。
quality:50,//(Number 类型 )压缩图片的质量,可以自己调整
//取值范围为1-100,1表示使用最低的图片质量(转换后的图片文件最小)、100表示使用最高的图片质量(转换后的图片文件最大); 默认值为50。
width:'auto', //(String 类型 )缩放图片的宽度
//支持像素值(如"100px")、百分比(如"50%")、自动计算(如"auto",即根据height与源图高的缩放比例计算,若未设置height则使用源图高度); 默认值为"auto"。 注意:若设置了width属性值不合法(如"0px"),则不对图片进行缩放操作。

                    height:'auto',  //(String 类型 )缩放图片的高度  
                                    //支持像素值(如"100px")、百分比(如"50%")、自动计算(如"auto",即根据width与源图宽的缩放比例计算,若未设置width则使用源图高度); 默认值为"auto"。 注意:若设置了height属性值不合法(如"0px"),则不对图片进行缩放操作。  

                    rotate:rotate,      //(Number 类型 )旋转图片的角度  
                                    //支持值:90-表示旋转90度;180-表示旋转180度;270-表示旋转270度。 注意:若设置rotate属性值不合法,则不对图片进行旋转操作。  
                    clip: ClipImageOptions          //(ClipImageOptions 类型(json对象) )裁剪图片的区域  
                                    //值参考ClipImageOptions定义,若设置clip属性值不合法,则不对图片进行裁剪操作。  
                }  

                //开始剪裁  
                plus.zip.compressImage(  
                    imgOption,      //JSON对象,配置图片压缩转换的参数  
                    function(){                                                                           
                        mui.toast("图片已保存到:"+imgOption.dst);  
                        //如果想要绝对路径  
                        var path=plus.io.convertLocalFileSystemURL(imgOption.dst);  
                        console.log(path);  
                        //后续处理  
                        //将imgOption.dst或者path传递给父页面,用来显示或者上传后台,请自行决定  
                        mui.fire(plus.webview.currentWebview().opener(),"crossImage",{crossImagePath:path});  
                        //最后退出剪裁页面  
                        setTimeout(function() {  
                            mui.back();  
                        }, 3000);  
                    },function(error){       
                        // Handle the error  
                        var code = error.code; // 错误编码  
                        var message = error.message; // 错误描述信息  
                        console.log("压缩失败");  
                        mui.toast("压缩失败,code--》" +code + ":message-->"+message);  

// mui.alert("压缩失败,code--》" +code + ":message-->"+message);
}
);

该问题目前已经被锁定, 无法添加新回复