基于MUI 拍照以及照片上传包含压缩处理

/**
 * 调用摄像头以及图片上传
 */
var TakePhoto={
	
	//点击拍照按钮或者图片区域
	MakePhoto:function(parameter){
		if (mui.os.plus) { 
                var a = [{ 
                    title: "拍照",type:"make"
                }, { 
                    title: "从手机相册选择" ,type:"Choose"
                }]; 
                if(parameter.Title!=undefined && parameter.Title=="照片"){
                    var deletePhoto=new Object();
                    deletePhoto.title="删除照片";
                    a.push(deletePhoto);
                }
                plus.nativeUI.actionSheet({ 
                    title: parameter.Title== undefined ? '修改用户头像': parameter.Title, 
                    cancel: "取消", 
                    buttons: a 
                }, function(b) { /*actionSheet 按钮点击事件*/ 
                    switch (b.index) { 
                        case 0: 
                            break; 
                        case 1: 
                            TakePhoto.GetImage(parameter); /*拍照*/ 
                            break; 
                        case 2: 
                            TakePhoto.GalleryImg(parameter);/*打开相册*/ 
                            break;
                        case 3: 
                            TakePhoto.DeleteImage(parameter);
                        default: 
                            break; 
                    } 
                }) 
            } 
	},
	
	/*删除照片*/
	DeleteImage:function(parameter){
		parameter.Success("DeleteImage");
	},
	
	/*拍照*/ 
	GetImage:function(parameter) { 
		    var fileName= new Date().getTime();
            var c = plus.camera.getCamera(); 
            c.supportedImageFormats="1024*768";
            c.captureImage(function(e) { 
                plus.io.resolveLocalFileSystemURL(e, function(entry) { 
                    var s = entry.toLocalURL() + "?version=" + new Date().getTime(); 
                    TakePhoto.CompressImage(s);
                    TakePhoto.SavePicture(s);
                    parameter.Success(s);
                }, function(e) { 
                    mui.alert("读取拍照文件错误:" + e.message); 
                }); 
            }, function(s) { 
            	//mui.alert("error:" + s); 
                console.log("error" + s); 
            }, { 
            	//设置文件名称和路径
                filename: "_doc/"+fileName+".png",
                //设置分辨率
                supportedImageFormats :"640*480"
            }) 
    },
    
    //保存到手机相册
    SavePicture:function(path){
		plus.gallery.save(path, function () {
			mui.toast( "图片已经保存到相册" );
		});
	},
    
    //图片压缩
    CompressImage:function(filePath){
    	plus.zip.compressImage({
			src:filePath,
			dst:filePath,
			quality:50,
			overwrite:true
		},
		function() {
			//alert("Compress success!");
		},function(error) {
			//alert("Compress error!");
		});
    },
    
    //本地相册选择 
    GalleryImg:function(parameter) { 
    	var fileName = new Date().getTime()+".png";
        plus.gallery.pick(function(a) { 
            plus.io.resolveLocalFileSystemURL(a, function(entry) { 
                plus.io.resolveLocalFileSystemURL("_doc/", function(root) { 
                    root.getFile(fileName, {}, function(file) { 
                        //文件已存在 
                        file.remove(function() { 
                            console.log("file remove success"); 
                            entry.copyTo(root, fileName, function(e) { 
                                    var e = e.fullPath + "?version=" + new Date().getTime(); 
                                    parameter.Success(e);
                                    //变更大图预览的src 
                                    //目前仅有一张图片,暂时如此处理,后续需要通过标准组件实现 
                                }, 
                                function(e) { 
                                	mui.alert("copy image fail:" + e.message);
                                    console.log('copy image fail:' + e.message); 
                                }); 
                        }, function() { 
                        	mui.alert("delete image fail:" + e.message);
                            console.log("delete image fail:" + e.message); 
                        }); 
                    }, function() { 
                        //文件不存在 
                        entry.copyTo(root, fileName, function(e) { 
                                var path = e.fullPath + "?version=" + new Date().getTime(); 
                                parameter.Success(path);
                            }, 
                            function(e) { 
                            	mui.alert("copy image fail:" + e.message);
                                console.log('copy image fail:' + e.message); 
                            }); 
                    }); 
                }, function(e) { 
                	mui.alert("get _www folder fail");
                    console.log("get _www folder fail"); 
                }) 
            }, function(e) { 
            	mui.alert("读取拍照文件错误:" + e.message);
                console.log("读取拍照文件错误:" + e.message); 
            }); 
        }, function(a) {}, { 
            filter: "image" 
        }) 
    },
    
    //上传图片 
    UploadImage:function(parameter) {
    	var image = new Image(); 
  		image.src = parameter.imgPath; 
    	var wt=plus.nativeUI.showWaiting("图片上传中");
    	var task=plus.uploader.createUpload("这里是上传路径",{method:"POST"},
            function(t,status){ //上传完成
                if(status==200){
                    //alert("上传成功:"+t.responseText);
                    parameter.Success(t.responseText);
                    wt.close(); //关闭等待提示按钮
                }else{
                    mui.alert("上传失败:"+status);
                    wt.close();//关闭等待提示按钮
                }
            }
        );
        //添加其他参数
        task.addData("UploadPath","AppPicture");
        task.addFile(image.src,{key:"Filedata"});
        task.start();	
   },
    
    //将图片压缩转成base64 
    GetBase64Image:function(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,", ""); 
    },  
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值