iOS下html上传图片被旋转

解决方法用exif.js+canvas

既然是解决问题,那就简单说一下,直接上代码!

html方式使用在iOS上可以直接调用照相机拍照,竖拍出来的图片都会变成横图!

思路:获取到照片拍摄的方向角,对非横拍的ios照片使用canvas的rotate进行角度旋转修正。

这里主要用到Orientation属性。

EXIF.getData(_ImgFile, function() { //_ImgFile图片数据

var Orientation = EXIF.getTag(this, 'Orientation');

return Orientation //Orientation返回的参数 1 、3 、6 、8

});

Orientation 参数 1、3、6、8 对应的你需要旋转的角度

1 0°

3 180°

6 顺时针90°

8 逆时针90°

ios拍出来照片信息里面Orientation 是6 顺时针90°

switch(Orientation){

case 6: // 旋转90度

widthORheight=0;

cvs.width = this.height * scale;

cvs.height = this.width * scale;

ctx.rotate(Math.PI / 2);

// (0,-imgHeight) 从旋转原理图那里获得的起始点

ctx.drawImage(this, 0,-this.height * scale, this.width * scale, this.height * scale );

break;

case 3: // 旋转180度

ctx.rotate(Math.PI);

ctx.drawImage(this, -this.width * scale, -this.height * scale, this.width * scale, this.height * scale);

break;

case 8: // 旋转-90度

widthORheight=0;

cvs.width = this.height * scale;

cvs.height = this.width * scale;

ctx.rotate(3 * Math.PI / 2);

ctx.drawImage(this, - this.width * scale, 0, this.width * scale, this.height * scale);

break;

}

全部代码

htlm:

css 随意

js

// 转换blob对象用于上传

function dataURLtoBlob(dataurl) {

var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],

bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);

while(n--){

u8arr[n] = bstr.charCodeAt(n);

}

return new Blob([u8arr], {type:mime});

}

var imgBlobIndex=[]; //存放多张图片的的容器。用于多张图片上传或者删除多张图片中某一张图片,

$("#showImg").change(function() {

var listNunber=$('#fileList').find('img').length,

Orientation = null,

_this = $(this)[0],

_leng = this.files.length,

maxSize = 2500000,// 限制单张大小2.5M

minSize=100000; //压缩临界 1M

for (var j = 0; j < _leng; j++) {

var _filelist = _this.files[j],

fileType = _filelist.type,

size = _filelist.size; //获取图片的大小

if (size < maxSize) {

//获取图片Orientation参数

EXIF.getData(_filelist, function() {

Orientation = EXIF.getTag(this, 'Orientation');

});

var fileReader = new FileReader();

fileReader.readAsDataURL(_filelist);

fileReader.onload = function (event) {

var result = event.target.result; //返回的dataURL

var image = new Image();

image.src = result;

image.onload = function () {//创建一个image对象,给canvas绘制使用

var cvs = document.createElement('canvas');

var ctx = cvs.getContext('2d');

var scale = 1; //预留压缩比

cvs.width = this.width * scale;

cvs.height = this.height * scale;//计算等比缩小后图片宽高

if(Orientation && Orientation != 1){

switch(Orientation){

case 6: // 旋转90度

cvs.width = this.height * scale;

cvs.height = this.width * scale;

ctx.rotate(Math.PI / 2);

// (0,-imgHeight) 从旋转原理图那里获得的起始点

ctx.drawImage(this, 0,-this.height * scale, this.width * scale, this.height * scale );

break;

case 3: // 旋转180度

ctx.rotate(Math.PI);

ctx.drawImage(this, this.width * scale, -this.height * scale, this.width * scale, this.height * scale);

break;

case 8: // 旋转-90度

cvs.width = this.height * scale;

cvs.height = this.width * scale;

ctx.rotate(3 * Math.PI / 2);

ctx.drawImage(this, - this.width * scale, 0, this.width * scale, this.height * scale);

break;

}

}else{

ctx.drawImage(this, 0, 0, cvs.width, cvs.height);

}

/* ctx.drawImage(this, 0, 0, cvs.width, cvs.height);*/

if(size

//小于压缩临界的,压缩0.7

var newImageData = cvs.toDataURL(fileType, 0.7);

}else {

//大于压缩临界的,根据原图的大小动态设置压缩比

var sca=1/(Math.sqrt([size/minSize])); //

var newImageData = cvs.toDataURL(fileType, sca);

}

var img='

'; //创建预览对象

imgid++;

i++;

$('#fileList').append(img); //图片预览容器

var imgdata=dataURLtoBlob(newImageData); // 创建blob 用于上传

imgBlobIndex.push(imgdata); //多张图片时上传用

};

};

}else {

alert('您照片大小超过2.5M了,请更换照片')

}

}

});

ios html 图片旋转了,解决移动端iOS下上传图片被旋转问题。相关推荐

  1. 用exfe.js和canvas解决移动端 IOS 拍照上传图片翻转问题

    前言 记得16年的时候我初入前端差不多一年,公司做了一个webapp,有上传头像功能,当时这个项目不是我在负责,测试的时候发现苹果用户拍照上传头像会翻转,当时几个前端的同学捯饬了一下午也没解决,结果问 ...

  2. Android11键盘弹出动画,(2016-11-04完美解决)移动端iOS第三方输入法遮挡底部input及android键盘回落后留白问题...

    问题概述 问题1:H5 web 移动端 输入框, 键盘唤起后fixed定位好的元素跟随页面滚动了起来- fixed属性失效了!满屏任性横飞, 如下图: 问题2:有几后来含些在到气时按式近篇来又的方浏消 ...

  3. 移动端手机h5上传图片旋转90度

    移动端手机h5上传图片会旋转90度的问题 h5页面调用相机正常情况下都是正常的,但是有些手机横着照相的时候就会正常的,iphone正确的拍照方式是横屏的,而用户往往是竖屏拍照上传的,就相当于照相机反转 ...

  4. IOS gif图片播放 swift

    IOS gif图片播放 swift 1. GIF在iOS平台上的几种加载方式 2. 第三方开源框架播放GIF 1. SDWebImage播放: 2. Kingfisher播放: 3. 自己实现加载GI ...

  5. ios 拍照上传到服务器_ios端浏览器拍照上传到服务器,图片被旋转90度 php 解决方案...

    1.可以通过前端进行解决,本案例通过后端解决的 判断请求的浏览器的ua,如果是ios浏览器则进行90度旋转 重点来了: 必须确保检测的图片是ios设备上传的完整图片,不要在前端压缩过的,因为压缩后的图 ...

  6. 解决H5 IOS手机图片上传时图片会旋转90°问题

    解决H5 IOS手机图片上传时图片会旋转90°问题 Vant 官方给出的解答需要自己解决,没有处理. 解决办法主要使用了 compressorjs 插件库 一.Vant UI库Uploader 组件图 ...

  7. 解决ios上传图片被旋转的问题

    利用exif.js插件解决ios手机上传竖拍照片旋转90度问题 移动端手机拍照时,发现ios手机上传竖拍图片会逆时针旋转90度,横拍照片无此问题,部分安卓手机存在此问题. 解决思路: 获取到照片拍摄的 ...

  8. ios html5 拍照旋转,H5 解决ios拍照旋转90度

    var img_photo=''; function selectFileImage(fileObj) { var formdata = new FormData(); var file = file ...

  9. flex 图片旋转(解决公转和自转问题)

    在Flex中图片的旋转是既有公转和自转的.这样在图片旋转的时候就有一定小麻烦: 为了更好地说明问题,先引入两个概念:"自转"和"公转".想象一下,地球在绕着太阳 ...

  10. SM2加密解决java与iOS端加解密不配套问题

    SM2加密解决java与iOS端加解密不配套问题 问题描述 问题判定 代码 声明 问题描述 使用java开发的SM2加解密,由java层生成SM2公私钥,iOS.Android(因和java层一致,暂 ...

最新文章

  1. div css导航栏设计,CSS+DIV设计实例:超酷的竖排导航栏
  2. AMDD 一个把大问题分成小问题的优化算法
  3. 照片识别出错_2.GQI2021强电专业点式专业图元识别连载
  4. java语言_JAVA语言
  5. C++读取文本文件中以TAB作为分隔符,且中间字段有为空的情况的方法?
  6. C语言(第二章):数据类型、运算符、表达式
  7. 支付宝上线长辈模式: 字体图标加大 去除了营销推送
  8. Windows 命令行基础(博主推荐)
  9. ad18常用快捷键可以修改吗_常用发泡剂之聚氨酯发泡剂在冬季可以用吗?
  10. Facebook怎样开发软件:工程师驱动的文化
  11. 自制EDL工程线进坚果R1手机9008端口刷机记录
  12. 睡眠时间 数据_我测试了Apple Watch睡眠追踪以节省您的时间和电池寿命
  13. ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L
  14. 4递归实现阶乘计算器 5递归实现TreeView绑定表MenuTree
  15. pytorch基础---李博文记录索引
  16. webrtc QOS方法四.2(拥塞算法学习)
  17. easyloader [easyui_1.4.2] 分析源码,妙手偶得之
  18. Java实现三位数的水仙花数计算
  19. 手把手教你做音乐播放器(七)播放音乐(上)
  20. 分布式理论:CAP 是三选二吗?

热门文章

  1. Es6 类class的关键 super、static、constructor、new.target
  2. python取反运算
  3. Python path
  4. Liferay 6.2 改造系列之十三:修改用户编辑页面表单内容
  5. C#学习笔记二: C#类型详解
  6. C#:String.Format数字格式化输出 {0:N2} {0:D2} {0:C2}...
  7. 九度OJ 1050:完数
  8. 3.使用SqlCommand执行SQL语句
  9. Eclipse SQL Explorer
  10. 成功销售的六个关键步骤