项目中一个功能是拍照上传,开始想着不是很简单吗?不就是html
<input type="file" id="file" accept="image/*;capture=camera" />html5
可是因为目前作的是混合app,在ios下是能够正常拍照的,安卓用扣扣,UC各类浏览器打开也都没问题,然而安卓一旦脱离这些浏览器,就只能选择相册中的照片不能拍照了ios
网上找了一堆input的兼容,可是都没有效果 浏览器
后来找到了:http://www.html5plus.org/doc/zh_cn/camera.htmlapp
上代码:测试
拍照:ui
getCamera(e){ var that=this plus.camera.getCamera().captureImage(function(e){ console.log(e); plus.io.resolveLocalFileSystemURL(e, function(entry) { var path = entry.toLocalURL(); document.getElementById("pic").src = path; }, function(e) { // mui.toast("读取拍照文件错误:" + e.message); }); }); },
相册获取图片:this
album(){ var that=this plus.gallery.pick(function(path){ plus.io.resolveLocalFileSystemURL(path, function(entry) { var path = entry.toLocalURL(); document.getElementById("pic").src = path; }, function(e) { // mui.toast("读取拍照文件错误:" + e.message); }); }); },
上传:url
upload(src){ //服务端接口路径 var that=this //获取图片元素 // var files = document.getElementById('headimg'); // 上传文件 // task.addData("name","photo"); var wt=plus.nativeUI.showWaiting(); var task=plus.uploader.createUpload(url, {method:"POST", priority: 60, timeout: 20, blocksize:100000000241024,retry:1}, function(t,status){ //上传完成 if(status==200){ // alert("上传成功:"+t.responseText); wt.close(); //关闭等待提示按钮 }else{ alert("上传失败"); wt.close();//关闭等待提示按钮 } } ); //添加其余参数 task.addFile(src,{key:"uploadFile"}); task.start(); }
经测试,此方式可兼容安卓,iOS,然而图片未压缩,上传速度慢,一样查看文档找到压缩代码:spa
resizeImage(src) { var that = this; plus.zip.compressImage( { src: src, dst: src, overwrite: true, width: '270px', //这里指定了宽度,一样能够修改 format: 'jpg', quality: 100 //图片质量再也不修改,以避免失真 }, function(e) { plus.nativeUI.closeWaiting(); that.upload(e.target); //上传图片, e.target存的是本地路径! }, function(err) { plus.nativeUI.alert('未知错误!',function() { // mui.back(); }); } ); },
以上。