MUI 拍照或选取照片上传作为头像
1.第一种方法是用H5来实现的
HTML:
<label>
<input style="opacity: 0;" type="file" accept="image/*" id="head_img_change"/>
<img id="headimg" src="img/erma_search_goods_detail.png">
</label>
JQ:
 $(function(){
     $("#head_img_change").change(function() {
       var $file = $(this);
       var fileObj = $file[0];
       var windowURL = window.URL || window.webkitURL;
       var dataURL;
       var $img = $("#headimg");
       if(fileObj && fileObj.files && fileObj.files[0]){
         dataURL = windowURL.createObjectURL(fileObj.files[0]);
         $img.attr('src',dataURL);
       }else{
         dataURL = $file.val();
         var imgObj = document.getElementById("headimg");
         // 1、在设置filter属性时,元素必须已经存在在DOM树中,动态创建的Node,也需要在设置属性前加入到DOM中,先设置属性再加入,无效;
         // 2、src属性需要像下面的方式添加,上面的两种方式添加,无效;
         imgObj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
         imgObj.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = dataURL;
       }
     });
   })
说明:1)外部加个label是为了把让用户点击的时候在范围内的都会触发input
     2)H5  input file上传图片,调用API:<input type="file" accept="image/*;capture=camera">直接调用相机
                       <input type="file" accept="image/*" />调用相机、图片或者相册
注:部分android机只能调用本地相册,相机调用不了或者只能调用相机,不能调用相册。
3)此方法是网上的一种方法,做了兼容的,IE6以上都能正常运行。
2.第二种方法:MUI h5+
不用引入mui.js或mui.min.js,直接在hbuilder这个IDE中新建移动app,然后在页面中直接调用方法就行了,当然,需要在manifest.json中先配置权限,然后真机调试才能看到效果。点击这里是拍照调用方法的文档
function getImage(){
    var cameraObj = plus.camera.getCamera();
    cameraObj.captureImage(function(path){
        CompressImage(path)
    }, function(e){
        console.log('取消拍照');
    }, {
        filename:'_doc/pic/',
        index:1
    });
}
function CompressImage(path){
    plus.zip.compressImage( {
        src:path,
        dst:path,
        overwrite:true,
        quality:60,
        rotate:90
    }, function(event){
        var _src=event.target;
        mui.confirm("是否保存该图片","温馨提示",["否","是"],function(e){
            console.log(_src)
            if(e.index){
                plus.gallery.save(_src, function(evt){
                    $(".box").append('<img src="'+evt.file+'">');
                    mui.alert('保存成功'+evt.file);
                }, function(err){
                    mui.alert('保存失败: '+JSON.stringify(err));
                });
            }
        })
        console.log(event.size)
    }, function(err){
    });
}
说明:
getImage()是点击拍照按钮之后触发的事件。CompressImage(path)是压缩图片的事件。
拍照上传需要用到5+的api。plus.camera.getCamera()是获取到camera摄像头对象
该对象有三个方法,其中一个是captureImage,它有三个参数,captureImage(successCB, errorCB, option)
successCB:拍照操作成功的回调函数(必选)CameraSuccessCallback
errorCB:拍照操作失败的回调函数(可选)CameraErrorCallback
option:摄像头拍照参数(必选)CameraOption。
option这个对象的属性:filename: 拍照或摄像文件保存的路径;
index: 拍照或摄像默认使用的摄像头,1表示主摄像头(后),2表示辅摄像头(前)
  compressImage是图片压缩的方法,属于5+里的zip接口。plus.zip.compressImage( options, successCB, errorCB),它也有三个参数,具体的参数信息可查看这里。
plus.gallery.save是保存文件到本地的方法,属于5+里的gallery接口,plus.gallery.save( path, successCB, errorCB )。它也有三个参数,具体的参数信息可查看这里。在上面的compressImage方法中,我加入了rotate:90的属性,是因为手持设备不同方向所拍摄的照片方向不同,照片的方向都会不同,但相册中会自动纠正,这一问题在ios和android中都存在。
一般你只要竖直拍摄的照片,在页面上显示的时候就会自动旋转90度的样子。所以这里强制旋转90度,适用于大部分情况,但是如果拍摄的时候横着拍,或者180度倒着拍就不行了。
可以考虑使用Exif.js来获取图片的拍照方向,然后设置旋转就能解决问题。 拍照完成了,上传的话,就可以用canvas把图片编码成base64,然后在后台解码base64就行了。也可以考虑使用5+api中的uploader来上传 这里有我自己总结的 5+ runtime 常用api,里面有详细的说明 第三种方法是通过form表单来实现:只需两步
第一步:html
<form action="" method="post" enctype="multipart/form-data">
<input type="file" onchange="uploadImg(this,'behindeImg')" class="comFileBtn" accept="image/*"/>
</form>
第二步:js
//上传图片
//that是该input,imgName是图片要显示的src的位置
function uploadImg(that,imgName){
var reads= new FileReader();
var fileObj=that.files[0];
var imageType = /^image\//;
//是否是图片,如果input没加accept属性,这里也可以判断
if (!imageType.test(fileObj.type)) {
alert("请选择图片!");
return;
}
//读取完成
reads.readAsDataURL(fileObj);
reads.onload = function(e) {
//图片路径设置为读取的图片
$("#"+imgName).attr('src',e.target.result) ;
};
}
这样,后台也可以通过读取表单数据来获取内容了
MUI 拍照或选取照片上传作为头像的更多相关文章
- 个人信息——头像更换(拍照或相册上传)~ 微信小程序
		
微信小程序中 在用户信息中关于用户头像更换(拍照或相册上传)功能实现. 图像点击触发事件: <image src='{{personImage}}' bindtap='changeAvatar' ...
 - Android实现批量照片上传至server,拍照或者从相冊选择
		
近期因为项目需求,须要完毕批量照片上传,折腾了一段时间,最终完毕了,达到了例如以下效果 主界面主要有GridView组成和button组成,当按下一个格点时,会调用相机或者相冊,拍照或者选择相冊照片, ...
 - Android图片上传(头像裁切+原图原样)
		
下面简单铺一下代码: (一)头像裁切.上传服务器(代码) 这里上边的按钮是头像的点击事件,弹出底部的头像选择框,下边的按钮跳到下个页面,进行原图上传. ? 1 2 3 4 5 6 7 8 9 10 1 ...
 - 用C#缩小照片上传到各种空间
		
中秋到了,首先祝各位猿友节日快乐!!! 本博文的原名称是“跟我一起用C#压缩照片上传到各种空间”,评论上有人开骂,没办法我这人就是自信霸气,但是既然有人提出来我还是改掉吧,如果文章写得不好的地方欢迎大 ...
 - css实现照片上传的加号框
		
css实现照片上传的加号框
 - 升级IOS8游戏上传自定义头像功能失效的问题
		
为了支持arm64,之前已经折腾了很久,昨晚打包准备提交苹果审核时,测试那边的同事反馈说游戏上传自定义头像功能不可用了. 游戏上传自定义功能的简介:卡牌游戏最初是<比武招亲>中有一个充VI ...
 - 【NopCommerce 3.1】asp.net mvc 利用jQuery from.js上传用户头像
		
纯代码不解释. 在CusotmerControllers中添加上传方法 /// <summary> /// ajax上传用户头像 /// </summary> /// < ...
 - MUI 单图片压缩上传(拍照+系统相册): 选择立即上传
		
1 html 部分 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
 - 微信调用照相拍照等 js 接口的权限配置 和 照片上传和下载实现
		
直接上代码: 1. 前端调试代码: <html> <head> <meta http-equiv="Content-Type" content=&qu ...
 
随机推荐
- B. Interesting drink
			
链接 [http://codeforces.com/group/1EzrFFyOc0/contest/706/problem/B] 题意 给你n个数,q次查询,每次输入一个m,问n个数中有多少个数小于 ...
 - B. Forgery
			
链接 [http://codeforces.com/contest/1059/problem/B] 题意 要伪造医生签名,先给你医生的签名nm的网格'.'表示空白',#'表示墨水,你的笔可以这么画以一 ...
 - 对PS的评价
			
Photoshop(简称:PS)是电脑上的图像处理软件:对于广大Photoshop爱好者而言,PS亦用来形容通过该类图形处理软件处理过的图片,即非原始.非未处理的图片:多数人对于这软件的了解仅限于“一 ...
 - Linux内核分析作业 NO.8  完结撒花~~~
			
进程的切换和系统的一般执行过程 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000 ...
 - Linux内核第七节         20135332武西垚
			
预处理.编译.链接和目标文件的格式 可执行程序是怎么得来的 以C语言为例,c代码经过编译器的预处理,编译成汇编代码,由汇编器编译成目标代码,再链接成可执行文件,由操作系统加载到cpu里来执行. (截图 ...
 - octave基本指令5
			
octave基本指令5 控制语句 for >> v=zreos(5,1) v = 0 0 0 0 0 >> for i=1:10, > v(i) = 2^i; > ...
 - redis演练
			
如何查看所有的key:keys * 如何查询某个key的value:get keyname
 - JavaScript表单提交不能清空type为hidden的input快速解决方案
			
http://stackoverflow.com/questions/2559616/javascript-true-form-reset-for-hidden-fields 把input type= ...
 - Appium学习笔记4_元素定位方法
			
Appium之元素定位,如果对Android上如何使用工具获取页面元素有问题的,请转战到这:http://www.cnblogs.com/taoSir/p/4816382.html. 下面主要是针对自 ...
 - mysql学习笔记一 —— 数据的增删改查
			
1.连接mysql mysql 直接回车(是以root身份,密码空,登陆的是本机localhost) [root@www mysql]# mysql -uroot -p123 -S /var/lib/ ...