iOS 手机照片上传服务器方向不对的原因以及解决方法
苹果手机上传图片到服务器,发现图片方向不对,实践发现:
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 手机照片上传服务器方向不对的原因以及解决方法相关推荐
- 服务器连接异常系统无法登录,Win10系统电脑无法登录LOL提示服务器连接异常的原因及解决方法...
Win10系统电脑无法登录LOL提示服务器连接异常的原因及解决方法 腾讯视频/爱奇艺/优酷/外卖 充值4折起 win10正式版LOL无法登录,提示"服务器连接异常"的问题,这该怎么 ...
- 服务器连接异常系统无法登录,科技教程:Win10系统电脑无法登录LOL提示服务器连接异常的原因及解决方法...
如今越来越多的小伙伴对于Win10系统电脑无法登录LOL提示服务器连接异常的原因及解决方法这方面的问题开始感兴趣,看似平静的每一天,在每个人身上都在发生着各种各样的故事,因为大家现在都是想要了解到此类 ...
- IIS FTP部分文件上传报错451的原因及解决方法
最近部署一个基于IIS7的ftp服务器,测试传几个文件遇到问题了,部分文件可以正常上传,但部分报错.下面与大家分享下造成的原因及解决方法 最近部署一个基于IIS7的ftp服务器,添加一个组的用户具有上 ...
- 电脑看不到android文件夹,电脑无法查看安卓手机外部存储(emulated)文件原因及解决方法...
电脑无法查看安卓手机外部存储(emulated)文件原因及解决方法 eonegh • 2019 年 09 月 07 日 从安卓端传输图片,CSV,TXT等文件到电脑端时就会经常出现无法显示问题(这里是 ...
- 服务器丢包的原因及解决方法
丢包是我们在使用ping对目站进行询问时,数据包由于各种原因在信道中丢失的现象.造成丢包问题一般是有一下几个原因 1.机房网络的原因机房线路网络不稳定,线路质量不好,波动大会出现丢包情况.在租用前要先 ...
- 访问量大如何增加服务器,服务器流量过大原因及解决方法
造成网站服务器流量过大的原因: 1.网站规模较大(比如门户网站.网络商城等),即网站本身访问量需求大,查看网站的Page View值.Hits值.日流量都很高. 2.网站页面设计不合理,页面中包含大图 ...
- 错误信息 服务器无法创建对象,收集的比较全的automation服务器不能创建对象 异常原因和解决方法...
1.automation服务器不能创建对象 只需要运行:regsvr32 scrrun.dll 就可以了 2.未将对象引用设置到对象的实例. 1.ViewState 对象为Unll. 2.DateSe ...
- 服务器自动重启的原因及解决方法
很近有很多站长反馈香港服务器出现自动重启的情况,是什么原因导致服务器自动重启呢?今天通达网络小编和大家探讨下这个原因! 1.先先出现这种情况的话,建议先检查下服务器安全性,检查是不是被设置植入了自动重 ...
- exif.js解决ios手机上传照片后显示为旋转90度问题(兼容ios13.4之前的版本 )
exif.js解决ios手机上传照片后显示为旋转90度问题(兼容ios13.4 ) 问题描述: 在做手机移动端app时,发现iOS12.5.1版本(iphone6)上传照片出现顺时针旋转90问题,ip ...
最新文章
- MySQL查询一周借阅最多的书_SQL中的借书经典案例
- 轻量级姿态估计simplepose
- 集成开发环境(IDE)
- Codeforces Round #521 (Div. 3)
- 项目管理概述学习记录(二)
- Python 爬取简单网页
- python最基础_python的最基础的知识点
- php连接数据库返回数据类型,php从数据库读取数据,并以json格式返回数据的方法...
- ps -ef |grep
- 乐视网:对FF与第九城市设立合资公司的计划不知情
- python 进程 线程 协程
- CCFA中国国际零售创新大会,观远数据用智能分析驱动零售决策
- 数据结构基础温故-5.图(上):图的基本概念
- Qt编译时报堆空间不足
- html5初学者小游戏源代码,html5 一个“一笔画”小游戏源码(通关)
- 在linux目录中设置权限设置,linux下为目录和文件设置权限(示例代码)
- 计算机培训作息时间安排,985学霸作息时间表“走红”,网友:越努力,越幸运...
- 文本输入框input实现字母大小写转换
- 辣椒的python之旅
- 星环TranswarpInceptor通过waterdrop添加表,视图,函数和存储过程