ios html 图片旋转了,解决移动端iOS下上传图片被旋转问题。
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下上传图片被旋转问题。相关推荐
- 用exfe.js和canvas解决移动端 IOS 拍照上传图片翻转问题
前言 记得16年的时候我初入前端差不多一年,公司做了一个webapp,有上传头像功能,当时这个项目不是我在负责,测试的时候发现苹果用户拍照上传头像会翻转,当时几个前端的同学捯饬了一下午也没解决,结果问 ...
- Android11键盘弹出动画,(2016-11-04完美解决)移动端iOS第三方输入法遮挡底部input及android键盘回落后留白问题...
问题概述 问题1:H5 web 移动端 输入框, 键盘唤起后fixed定位好的元素跟随页面滚动了起来- fixed属性失效了!满屏任性横飞, 如下图: 问题2:有几后来含些在到气时按式近篇来又的方浏消 ...
- 移动端手机h5上传图片旋转90度
移动端手机h5上传图片会旋转90度的问题 h5页面调用相机正常情况下都是正常的,但是有些手机横着照相的时候就会正常的,iphone正确的拍照方式是横屏的,而用户往往是竖屏拍照上传的,就相当于照相机反转 ...
- IOS gif图片播放 swift
IOS gif图片播放 swift 1. GIF在iOS平台上的几种加载方式 2. 第三方开源框架播放GIF 1. SDWebImage播放: 2. Kingfisher播放: 3. 自己实现加载GI ...
- ios 拍照上传到服务器_ios端浏览器拍照上传到服务器,图片被旋转90度 php 解决方案...
1.可以通过前端进行解决,本案例通过后端解决的 判断请求的浏览器的ua,如果是ios浏览器则进行90度旋转 重点来了: 必须确保检测的图片是ios设备上传的完整图片,不要在前端压缩过的,因为压缩后的图 ...
- 解决H5 IOS手机图片上传时图片会旋转90°问题
解决H5 IOS手机图片上传时图片会旋转90°问题 Vant 官方给出的解答需要自己解决,没有处理. 解决办法主要使用了 compressorjs 插件库 一.Vant UI库Uploader 组件图 ...
- 解决ios上传图片被旋转的问题
利用exif.js插件解决ios手机上传竖拍照片旋转90度问题 移动端手机拍照时,发现ios手机上传竖拍图片会逆时针旋转90度,横拍照片无此问题,部分安卓手机存在此问题. 解决思路: 获取到照片拍摄的 ...
- ios html5 拍照旋转,H5 解决ios拍照旋转90度
var img_photo=''; function selectFileImage(fileObj) { var formdata = new FormData(); var file = file ...
- flex 图片旋转(解决公转和自转问题)
在Flex中图片的旋转是既有公转和自转的.这样在图片旋转的时候就有一定小麻烦: 为了更好地说明问题,先引入两个概念:"自转"和"公转".想象一下,地球在绕着太阳 ...
- SM2加密解决java与iOS端加解密不配套问题
SM2加密解决java与iOS端加解密不配套问题 问题描述 问题判定 代码 声明 问题描述 使用java开发的SM2加解密,由java层生成SM2公私钥,iOS.Android(因和java层一致,暂 ...
最新文章
- div css导航栏设计,CSS+DIV设计实例:超酷的竖排导航栏
- AMDD 一个把大问题分成小问题的优化算法
- 照片识别出错_2.GQI2021强电专业点式专业图元识别连载
- java语言_JAVA语言
- C++读取文本文件中以TAB作为分隔符,且中间字段有为空的情况的方法?
- C语言(第二章):数据类型、运算符、表达式
- 支付宝上线长辈模式: 字体图标加大 去除了营销推送
- Windows 命令行基础(博主推荐)
- ad18常用快捷键可以修改吗_常用发泡剂之聚氨酯发泡剂在冬季可以用吗?
- Facebook怎样开发软件:工程师驱动的文化
- 自制EDL工程线进坚果R1手机9008端口刷机记录
- 睡眠时间 数据_我测试了Apple Watch睡眠追踪以节省您的时间和电池寿命
- ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L
- 4递归实现阶乘计算器 5递归实现TreeView绑定表MenuTree
- pytorch基础---李博文记录索引
- webrtc QOS方法四.2(拥塞算法学习)
- easyloader [easyui_1.4.2] 分析源码,妙手偶得之
- Java实现三位数的水仙花数计算
- 手把手教你做音乐播放器(七)播放音乐(上)
- 分布式理论:CAP 是三选二吗?
热门文章
- Es6 类class的关键 super、static、constructor、new.target
- python取反运算
- Python path
- Liferay 6.2 改造系列之十三:修改用户编辑页面表单内容
- C#学习笔记二: C#类型详解
- C#:String.Format数字格式化输出 {0:N2} {0:D2} {0:C2}...
- 九度OJ 1050:完数
- 3.使用SqlCommand执行SQL语句
- Eclipse SQL Explorer
- 成功销售的六个关键步骤