JavaScript如何处理移动端拍摄图片旋转问题
本文实例为大家分享了js移动端拍摄图片旋转的具体代码,供大家参考,具体内容如下
第一步:引入exif-js
第二步:
/** *处理图片文件(处理移动端拍摄图片旋转问题) *fileObj.file图片文件独享 *fileObj.resolution在指定图片格式为image/jpeg或image/webp的情况下,可以从0到1的区间内选择图片的质量。 *fileObj.fileType输入的文件类型,1file对象,2blob对象,3base64字符串 *fileObj.fileName输出的文件名称,默认为picture.jpeg *fileObj.callback回调函数 */ functionhandleImageFile(fileObj){ //给参数附初始值 fileObj.fileName=fileObj.hasOwnProperty("fileName")?"images/"+fileObj.fileName:"images/picture.jpeg"; //获取文件类型 varfType=fileObj.file.type; if(fType.indexOf("image")===-1)returnfileObj.callback({ status:500, message:"文件类型不正确", data:null }); if(!EXIF)returnfileObj.callback({ status:500, message:"EXIF不存在", data:null }); if(fileObj.file){ //获取照片方向角属性,用户旋转控制 EXIF.getData(fileObj.file,function(){ varorientation=EXIF.getTag(this,'Orientation'); varoReader=newFileReader(); oReader.onload=function(e){ varimage=newImage(); image.src=e.target.result; image.onload=function(){ varcanvas=document.createElement("canvas"); varctx=canvas.getContext("2d"); varresultFile=null; varua=navigator.userAgent; canvas.width=this.naturalWidth; canvas.height=this.naturalHeight; ctx.drawImage(this,0,0,this.naturalWidth,this.naturalHeight); //android终端 varisAdr=ua.indexOf("Android")>-1||ua.indexOf("Adr")>-1; //ios终端 varisIOS=ua.indexOf("iPhone")>-1||ua.indexOf("iOS")>-1; //修复ios或Android if(isIOS||isAdr){ //如果方向角不为1,都需要进行旋转 if(orientation&&orientation!==""&&orientation!==1){ switch(orientation){ case6://需要顺时针(向左)90度旋转 rotateImg(this,"left",canvas); break; case8://需要逆时针(向右)90度旋转 rotateImg(this,"right90",canvas); break; case3://需要180度旋转,转两次 rotateImg(this,"right180",canvas); break; } } resultFile=canvas.toDataURL("image/jpeg",fileObj.resolution); }else{ resultFile=canvas.toDataURL("image/jpeg",fileObj.resolution); } switch(fileObj.fileType){ case1: case2: fileObj.callback({ status:200, message:"success", data:dataURLtoFile(resultFile,fileObj.fileType,fileObj.fileName) }); break; case3: fileObj.callback({ status:200, message:"success", data:resultFile }); break; default: break; } }; }; oReader.readAsDataURL(fileObj.file); }); }else{ returnfileObj.callback({ status:500, message:"文件不存在", data:null }); } /** *旋转图片 */ functionrotateImg(img,direction,canvas){ if(img===null)return; //最小与最大旋转方向,图片旋转4次后回到原方向 varminStep=0; varmaxStep=3; //img的高度和宽度不能在img元素隐藏后获取,否则会出错 varwidth=img.width; varheight=img.height; varstep=2; if(step===null)step=minStep; if(direction==="right90"){ step++; step>maxStep&&(step=minStep); }elseif(direction==="right180"){ step=2; }else{ step--; step以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。