ios上传图片显示方向错误问题
IOS 上传图片方向显示错误问题
问题描述
在使用苹果手机上传图片的时候,发现传完的图片显示出来方向是错误的,竖着的图片会变成横着显示(少部分安卓手机也存在这个问题)
产生原因
ios 相机加入了方向传感器,它可以记录拍摄时的方向,并且记录在 exif 当中,所以这个时候竖拍的照片显示出来就会就会‘横’着了
解决办法
- 获取图片的 Orientation 信息,也就是拍摄方向
- 绘制一个 canvas, 将该图片绘制上去,然后修正显示方向
- 将 canvas 转化成我们需要的格式
具体操作:
const reader = new FileReader();
reader.onload = function() {
const result = this.result;
const photoImg = new Image();
photoImg.src = result;
photoImg.onload = function() {
// 生成canvas
const canvas = document.createElement('canvas');
const width = photoImg.width;
const height = photoImg.height;
canvas.height = width;
canvas.width = height;
const ctx = canvas.getContext('2d');
EXIF.getData(photoImg, function() {
// 获取 Orientation 信息
const Orientation = EXIF.getTag(this, 'Orientation');
// 根据 Orientation 信息修正方向
switch (Orientation) {
case 6:
ctx.rotate(Math.PI / 2);
ctx.translate(0, -height);
break;
case 3:
ctx.rotate(Math.PI);
ctx.translate(-width, -height);
break;
case 8:
ctx.rotate(-Math.PI / 2);
ctx.translate(-height, 0);
break;
default:
break;
}
// 将方向错误的图片绘制到 canvas 上
ctx.drawImage(photoImg, 0, 0);
// 将方向修正后的 canvas 装化成 base64 编码
const newImg = canvas.toDataURL('image/jpeg');
message.hide();
resolve(newImg);
});
};
};
reader.readAsDataURL(photo);
Orientation 参数对照

资料
ios上传图片显示方向错误问题的更多相关文章
- [iOS]关于视频方向的若干问题
版本: OS X 10.10.5 Xcode 6.4(6E35b) iOS >= 7 一.MOV/MP4视频文件中的Rotation元数据 iOS上内置相机应用录制的mov/mp4视频可能产生 ...
- dedecms织梦网站图片集上传图片出现302错误图片提示怎么解决 已测
时间:2016-01-20 来源:未知 作者:模板之家 阅读:次 小编今天上传织梦网站模板的时候,在图片集里面选择上传图片的时候,弹出302错误提示,当是真的是郁闷了,试了好几次,开始还以为是图片过大 ...
- ASP.NET Core中显示自定义错误页面-增强版
之前的博文 ASP.NET Core中显示自定义错误页面 中的方法是在项目中硬编码实现的,当有多个项目时,就会造成不同项目之间的重复代码,不可取. 在这篇博文中改用middleware实现,并且放在独 ...
- ASP.NET Core中显示自定义错误页面
在 ASP.NET Core 中,默认情况下当发生500或404错误时,只返回http状态码,不返回任何内容,页面一片空白. 如果在 Startup.cs 的 Configure() 中加上 app. ...
- MVC中使用jquery uploadify上传图片报302错误
使用jquery uploadify上传图片报302错误研究了半天,发现我上传的action中有根据session判断用户是否登录,如果没有登录就跳到登陆页,所以就出现了302跳转错误.原来更新了fl ...
- LCD显示方向
一.ILI9341内存到显示地址的映射 本文只讨论“正常显示”,不讨论“垂直滚动显示”模式. 可以看到物理内存被两个指针访问,行指针和列指针,行指针范围从000h到013Fh,列指针范围为0000h到 ...
- 造成win2008 500内部错误不能显示详细错误的原因和解决方法
造成500错误常见原因有:ASP语法出错.ACCESS数据库连接语句出错.文件引用与包含路径出错.使用了服务器不支持的组件如FSO等. 另外,对于win2008的IIS默认不显示详细出错信息的问题以下 ...
- 关于Android4.x系统默认显示方向各种修改
1.设置属性值 在device.mk文件中加入PRODUCT_PROPERTY_OVERRIDES += \ ro.sf.hwrotation=180 2.设置屏幕默认显示方向 在frameworks ...
- 转:PHP - .htaccess设置显示PHP错误
使用.htaccess可以在某种程度上更改PHP的错误显示的设置,实际上,相当于更改PHP.ini的参数,很是方便. 将以下相应代码放到对应目录中的.htaccess文件,即可实现相应功能. 关闭错误 ...
随机推荐
- 使用postgresql作为cm的数据库时候添加报错
如下图,当postgresql安装成功,建立好数据库scm,rman,amon之后,添加cm对应服务报错hadoopNode2没有相应数据库: No database server found run ...
- Python操作nosql数据库之redis
一.NoSQL的操作 NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不 ...
- ActiveMQ测试实例
ActiveMQ的安装与启动 1 下载ActiveMQ:http://activemq.apache.org/download.html 2 下载后解压到任意文件夹,解压后文件夹内的目录为: 3 进入 ...
- 【APUE】Chapter3 File I/O
这章主要讲了几类unbuffered I/O函数的用法和设计思路. 3.2 File Descriptors fd本质上是非负整数,当我们执行open或create的时候,kernel向进程返回一个f ...
- 在阿里云上遇见更好的Oracle(二)
从上一篇文章的反馈来看,大家还是喜欢八卦多过技术细节,那这一篇继续一些题外话,说说我对“去IOE”的看法. 对同一件事情,参与的没参与的人,讨论起来,都会有各自的立场.所以这里先申明一下,以下内容只是 ...
- [ubuntu 18.04 + RTX 2070] Anaconda3 - 5.2.0 + CUDA10.0 + cuDNN 7.4.1 + bazel 0.17 + tensorRT 5 + Tensorflow(GPU)
(RTX 2070 同样可以在 ubuntu 16.04 + cuda 9.0中使用.Ubuntu18.04可能只支持cuda10.0,在跑开源代码时可能会报一些奇怪的错误,所以建议大家配置 ubun ...
- 《机器学习实战》 in python3.x
机器学习实战这本书是在python2.x的环境下写的,而python3.x中好多函数和2.x中的名称或使用方法都不一样了,因此对原书中的内容需要校正,下面简单的记录一下学习过程中fix的部分 1.pr ...
- highcharts图表插件初探
转载请注明出处:http://www.cnblogs.com/liubei/p/highchartsOption.html HighCharts简介 Highcharts 是一个用纯JavaScrip ...
- edgeboxes proposal 和dpm 连接
经过多天阅读文献和代码,我对edgeboxes 和 dpm的有了一定了解. 现在决定把它们简单地连接起来 也就是edgeboxes proposal 推荐窗口 然后 dpm去判断 但按照我理解的DPM ...
- antDesign DatePicker 禁用日期
const disabledDate = (current) => { return current < moment().subtract(29, 'days') || current ...