苹果手机上传图片到服务器,发现图片方向不对,实践发现:

1:原因:  相机拍照后直接取出来的UIimage(用UIImagePickerControllerOriginalImage取出),它本身的imageOrientation属性是3,即UIImageOrientationRight。如果这个图片直接使用则没事,但是如果对它进行裁剪、缩放等操作后,它的这个imageOrientation属性会变成0。此时这张图片用在别的地方就会发生旋转。(手机竖着拍则为UIImageOrientationRight,手机横着拍为UIImageOrientationUp)

2:  imageOrientation是只读的,不能直接修改其值。

解决方法:

1. 设置相机的一个属性allowsEditing为YES,设了这个值,你拍完照片后会在照片上出现一个框框,这就是对照片的裁剪编辑。在相机的代理方法中取照片的时候就别用UIImagePickerControllerOriginalImage来取了,要用UIImagePickerControllerEditedImage。用这个key取出来的照片,它的imageOrientation是0,所以之后的任何裁剪、缩放操作都不会造成旋转。

2.由于开发中经常要对原图进行裁剪和压缩,所以第一种方法就不可取了,于是用第二种方法

//调整图片方向

+ (UIImage *)fixOrientation:(UIImage *)srcImg {

if (srcImg.imageOrientation ==UIImageOrientationUp) return srcImg;

CGAffineTransform transform =CGAffineTransformIdentity;

switch (srcImg.imageOrientation) {

caseUIImageOrientationDown:

caseUIImageOrientationDownMirrored:

transform = CGAffineTransformTranslate(transform, srcImg.size.width, srcImg.size.height);

transform = CGAffineTransformRotate(transform,M_PI);

break;

caseUIImageOrientationLeft:

caseUIImageOrientationLeftMirrored:

transform = CGAffineTransformTranslate(transform, srcImg.size.width,0);

transform = CGAffineTransformRotate(transform,M_PI_2);

break;

caseUIImageOrientationRight:

caseUIImageOrientationRightMirrored:

transform = CGAffineTransformTranslate(transform,0, srcImg.size.height);

transform = CGAffineTransformRotate(transform, -M_PI_2);

break;

caseUIImageOrientationUp:

caseUIImageOrientationUpMirrored:

break;

}

switch (srcImg.imageOrientation) {

caseUIImageOrientationUpMirrored:

caseUIImageOrientationDownMirrored:

transform = CGAffineTransformTranslate(transform, srcImg.size.width,0);

transform = CGAffineTransformScale(transform, -1,1);

break;

caseUIImageOrientationLeftMirrored:

caseUIImageOrientationRightMirrored:

transform = CGAffineTransformTranslate(transform, srcImg.size.height,0);

transform = CGAffineTransformScale(transform, -1,1);

break;

caseUIImageOrientationUp:

caseUIImageOrientationDown:

caseUIImageOrientationLeft:

caseUIImageOrientationRight:

break;

}

CGContextRef ctx =CGBitmapContextCreate(NULL, srcImg.size.width, srcImg.size.height,

CGImageGetBitsPerComponent(srcImg.CGImage),0,

CGImageGetColorSpace(srcImg.CGImage),

CGImageGetBitmapInfo(srcImg.CGImage));

CGContextConcatCTM(ctx, transform);

switch (srcImg.imageOrientation) {

caseUIImageOrientationLeft:

caseUIImageOrientationLeftMirrored:

caseUIImageOrientationRight:

caseUIImageOrientationRightMirrored:

CGContextDrawImage(ctx,CGRectMake(0,0,srcImg.size.height,srcImg.size.width), srcImg.CGImage);

break;

default:

CGContextDrawImage(ctx,CGRectMake(0,0,srcImg.size.width,srcImg.size.height), srcImg.CGImage);

break;

}

CGImageRef cgimg =CGBitmapContextCreateImage(ctx);

UIImage *img = [UIImageimageWithCGImage:cgimg];

CGContextRelease(ctx);

CGImageRelease(cgimg);

return img;

}

直接传入图片,得到纠正方向后的图片

iOS 手机照片上传服务器方向不对的原因以及解决方法相关推荐

  1. 服务器连接异常系统无法登录,Win10系统电脑无法登录LOL提示服务器连接异常的原因及解决方法...

    Win10系统电脑无法登录LOL提示服务器连接异常的原因及解决方法 腾讯视频/爱奇艺/优酷/外卖 充值4折起 win10正式版LOL无法登录,提示"服务器连接异常"的问题,这该怎么 ...

  2. 服务器连接异常系统无法登录,科技教程:Win10系统电脑无法登录LOL提示服务器连接异常的原因及解决方法...

    如今越来越多的小伙伴对于Win10系统电脑无法登录LOL提示服务器连接异常的原因及解决方法这方面的问题开始感兴趣,看似平静的每一天,在每个人身上都在发生着各种各样的故事,因为大家现在都是想要了解到此类 ...

  3. IIS FTP部分文件上传报错451的原因及解决方法

    最近部署一个基于IIS7的ftp服务器,测试传几个文件遇到问题了,部分文件可以正常上传,但部分报错.下面与大家分享下造成的原因及解决方法 最近部署一个基于IIS7的ftp服务器,添加一个组的用户具有上 ...

  4. 电脑看不到android文件夹,电脑无法查看安卓手机外部存储(emulated)文件原因及解决方法...

    电脑无法查看安卓手机外部存储(emulated)文件原因及解决方法 eonegh • 2019 年 09 月 07 日 从安卓端传输图片,CSV,TXT等文件到电脑端时就会经常出现无法显示问题(这里是 ...

  5. 服务器丢包的原因及解决方法

    丢包是我们在使用ping对目站进行询问时,数据包由于各种原因在信道中丢失的现象.造成丢包问题一般是有一下几个原因 1.机房网络的原因机房线路网络不稳定,线路质量不好,波动大会出现丢包情况.在租用前要先 ...

  6. 访问量大如何增加服务器,服务器流量过大原因及解决方法

    造成网站服务器流量过大的原因: 1.网站规模较大(比如门户网站.网络商城等),即网站本身访问量需求大,查看网站的Page View值.Hits值.日流量都很高. 2.网站页面设计不合理,页面中包含大图 ...

  7. 错误信息 服务器无法创建对象,收集的比较全的automation服务器不能创建对象 异常原因和解决方法...

    1.automation服务器不能创建对象 只需要运行:regsvr32 scrrun.dll 就可以了 2.未将对象引用设置到对象的实例. 1.ViewState 对象为Unll. 2.DateSe ...

  8. 服务器自动重启的原因及解决方法

    很近有很多站长反馈香港服务器出现自动重启的情况,是什么原因导致服务器自动重启呢?今天通达网络小编和大家探讨下这个原因! 1.先先出现这种情况的话,建议先检查下服务器安全性,检查是不是被设置植入了自动重 ...

  9. exif.js解决ios手机上传照片后显示为旋转90度问题(兼容ios13.4之前的版本 )

    exif.js解决ios手机上传照片后显示为旋转90度问题(兼容ios13.4 ) 问题描述: 在做手机移动端app时,发现iOS12.5.1版本(iphone6)上传照片出现顺时针旋转90问题,ip ...

最新文章

  1. MySQL查询一周借阅最多的书_SQL中的借书经典案例
  2. 轻量级姿态估计simplepose
  3. 集成开发环境(IDE)
  4. Codeforces Round #521 (Div. 3)
  5. 项目管理概述学习记录(二)
  6. Python 爬取简单网页
  7. python最基础_python的最基础的知识点
  8. php连接数据库返回数据类型,php从数据库读取数据,并以json格式返回数据的方法...
  9. ps -ef |grep
  10. 乐视网:对FF与第九城市设立合资公司的计划不知情
  11. python 进程 线程 协程
  12. CCFA中国国际零售创新大会,观远数据用智能分析驱动零售决策
  13. 数据结构基础温故-5.图(上):图的基本概念
  14. Qt编译时报堆空间不足
  15. html5初学者小游戏源代码,html5 一个“一笔画”小游戏源码(通关)
  16. 在linux目录中设置权限设置,linux下为目录和文件设置权限(示例代码)
  17. 计算机培训作息时间安排,985学霸作息时间表“走红”,网友:越努力,越幸运...
  18. 文本输入框input实现字母大小写转换
  19. 辣椒的python之旅
  20. 星环TranswarpInceptor通过waterdrop添加表,视图,函数和存储过程

热门文章

  1. 试图运行项目时出错:未能加载文件或程序集 或它的某一个依赖项。该模块应包含一个程序集清单 .
  2. Andersen Global首次进入塞拉利昂市场,继续拓展非洲业务
  3. minio搭建图床 配合typora实现写博客图片自动上传
  4. “正信小宝”养老篇:坐享绿色稳定收益
  5. Quartz简介及应用场景
  6. 看卡辛斯基的警告 让我想起 人类简史
  7. vbs 打开指定浏览器网页
  8. 【小程序】766- 一文看懂小程序分享到朋友圈
  9. excel如何将内容拆分
  10. JAVA 算法中Map 使用技巧,持续更新,边学边更