当前位置: 首页 > 编程笔记 >

IOS中html5上传图片方向问题解决方法

穆毅然
2023-03-14
本文向大家介绍IOS中html5上传图片方向问题解决方法,包括了IOS中html5上传图片方向问题解决方法的使用技巧和注意事项,需要的朋友参考一下

用html5编写图片裁切上传,在iphone手机上可能会遇到图片方向错误问题,在此把解决方法和大家分享一下,
用到了html5的 FileReader和Canvas,如果还没有接触的同学,先了解一下其方法。

 //此方法为file input元素的change事件
 function change(){
  var file = this.files[0];
  var orientation;
  //EXIF js 可以读取图片的元信息 https://github.com/exif-js/exif-js
  EXIF.getData(file,function(){
    orientation=EXIF.getTag(this,'Orientation');
  });
  var reader = new FileReader();
  reader.onload = function(e) {  
    getImgData(this.result,orientation,function(data){
      //这里可以使用校正后的图片data了 
    }); 
  }
  reader.readAsDataURL(file);
}

// @param {string} img 图片的base64
// @param {int} dir exif获取的方向信息
// @param {function} next 回调方法,返回校正方向后的base64
function getImgData(img,dir,next){
 var image=new Image();
 image.onload=function(){
  var degree=0,drawWidth,drawHeight,width,height;
  drawWidth=this.naturalWidth;
  drawHeight=this.naturalHeight;
  //以下改变一下图片大小
  var maxSide = Math.max(drawWidth, drawHeight);
  if (maxSide > 1024) {
    var minSide = Math.min(drawWidth, drawHeight);
    minSide = minSide / maxSide * 1024;
    maxSide = 1024;
    if (drawWidth > drawHeight) {
      drawWidth = maxSide;
      drawHeight = minSide;
    } else {
      drawWidth = minSide;
      drawHeight = maxSide;
    }
  }
  var canvas=document.createElement('canvas');
  canvas.width=width=drawWidth;
  canvas.height=height=drawHeight; 
  var context=canvas.getContext('2d');
  //判断图片方向,重置canvas大小,确定旋转角度,iphone默认的是home键在右方的横屏拍摄方式
  switch(dir){
    //iphone横屏拍摄,此时home键在左侧
    case 3:
      degree=180;
      drawWidth=-width;
      drawHeight=-height;
      break;
    //iphone竖屏拍摄,此时home键在下方(正常拿手机的方向)
    case 6:
      canvas.width=height;
      canvas.height=width; 
      degree=90;
      drawWidth=width;
      drawHeight=-height;
      break;
    //iphone竖屏拍摄,此时home键在上方
    case 8:
      canvas.width=height;
      canvas.height=width; 
      degree=270;
      drawWidth=-width;
      drawHeight=height;
      break;
  }
  //使用canvas旋转校正
  context.rotate(degree*Math.PI/180);
  context.drawImage(this,0,0,drawWidth,drawHeight);
  //返回校正图片
  next(canvas.toDataURL("image/jpeg",.8));
 }
 image.src=img;
}
 类似资料:
  • 本文向大家介绍ueditor编辑器不能上传图片问题的解决方法,包括了ueditor编辑器不能上传图片问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 ueditor是百度编辑器,在本地的iis环境是可以上传图片了,但放在服务器的iis环境无法上传图片了,经过搜索发现是iis设置问题,引起这个问题的主要原因是,大多数虚拟主机不会给IIS匿名账号访问磁盘上的非用户目录,连读取的权限都没有,既然我

  • 本文向大家介绍IOS 中XAMPP配置问题及解决方法,包括了IOS 中XAMPP配置问题及解决方法的使用技巧和注意事项,需要的朋友参考一下 IOS 中XAMPP配置问题及解决方法 1、终端运行sudo /Applications/XAMPP/xamppfiles/xampp start 提示 解决 如果提示 /System/Library/LaunchDaemons/org.apache.http

  • 本文向大家介绍解决matplotlib库show()方法不显示图片的问题,包括了解决matplotlib库show()方法不显示图片的问题的使用技巧和注意事项,需要的朋友参考一下 最近使用python里的matplotlib库绘图,想在代码结束时显示图片看看,结果图片一闪而过,附上我原来代码: 我上网查了一下,在遇到show()方法无法显示图片或者图片一闪而过,解决方案分两步: 1.加头文件,完整

  • 本文向大家介绍Android Webview重定向问题解决方法,包括了Android Webview重定向问题解决方法的使用技巧和注意事项,需要的朋友参考一下 项目中需要webview重定向,但是由于一个webveiw里面有许多加载操作,因此在调用webview。goback()方法时,往往达不到我们需要的操作效果。 1.解决方法 WebBackForwardList webBackForward

  • 请问下uniapp打包成app怎么上传图片,可以用chooseImage上传图片吗,chooseImage是不是已经被淘汰了,新版的chooseMedia不支持

  • 本文向大家介绍Eclipse git推送上传错误问题解决方案,包括了Eclipse git推送上传错误问题解决方案的使用技巧和注意事项,需要的朋友参考一下 Eclipse 中的 Git Eclipse 附带了一个名为 Egit 的插件,它提供了一个非常完善的 Git 操作接口。 这个插件可以通过切换到 Git 视图来使用。( Window > Open Perspective > Other…,