项目中一个功能是拍照上传,开始想着不是很简单吗?不就是
<input type="file" id="file" accept="image/*;capture=camera" />
但是由于目前做的是混合app,在ios下是可以正常拍照的,安卓用扣扣,UC各种浏览器打开也都没问题,然而安卓一旦脱离这些浏览器,就只能选择相册中的照片不能拍照了
网上找了一堆input的兼容,但是都没有效果
后来找到了:http://www.html5plus.org/doc/zh_cn/camera.html
上代码:
拍照:
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); }); }); },
相册获取图片:
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); }); }); },
上传:
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,然而图片未压缩,上传速度慢,同样查看文档找到压缩代码:
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(); }); } ); },
以上。
原文地址:https://www.cnblogs.com/suiyide/p/9242664.html
时间: 2024-10-08 01:18:47