iOS拍照后图片自动旋转90度的完美解决方法
发布时间 - 2026-01-10 22:04:18 点击率:次今天开发一个拍照获取照片的功能的时候, 发现上传之后图片会自动旋转90.

测试发现, 只要是图片大于2M, 系统就会自动翻转照片
相机拍照后直接取出来的UIimage(用UIImagePickerControllerOriginalImage取出),它本身的imageOrientation属性是3,即UIImageOrientationRight。如果这个图片直接使用则没事,但是如果对它进行裁剪、缩放等操作后,它的这个imageOrientation属性会变成0。此时这张图片用在别的地方就会发生旋转。imageOrientation是只读的,不能直接修改其值。
解决方法如下:
1. 设置相机的一个属性allowsEditing为YES,设了这个值,你拍完照片后会在照片上出现一个框框,这就是对照片的裁剪编辑。在相机的代理方法中取照片的时候就别用UIImagePickerControllerOriginalImage来取了,要用UIImagePickerControllerEditedImage。用这个key取出来的照片,它的imageOrientation是0,所以之后的任何裁剪、缩放操作都不会造成旋转。这是第一种方法。
2. 第一种解决方法基本没用, 开发中基本都会对图片进行裁剪和压缩. 这里有一个专门针对这个事的很好的category
+ (UIImage *)fixOrientation:(UIImage *)aImage {
// No-op if the orientation is already correct
if (aImage.imageOrientation ==UIImageOrientationUp)
return aImage;
// We need to calculate the proper transformation to make the image upright.
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
CGAffineTransform transform =CGAffineTransformIdentity;
switch (aImage.imageOrientation) {
caseUIImageOrientationDown:
caseUIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
caseUIImageOrientationLeft:
caseUIImageOrientationLeftMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width,0);
transform = CGAffineTransformRotate(transform, M_PI_2);
break;
caseUIImageOrientationRight:
caseUIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);
transform = CGAffineTransformRotate(transform, -M_PI_2);
break;
default:
break;
}
switch (aImage.imageOrientation) {
caseUIImageOrientationUpMirrored:
caseUIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width,0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
caseUIImageOrientationLeftMirrored:
caseUIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.height,0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
default:
break;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRef ctx =CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
CGImageGetBitsPerComponent(aImage.CGImage),0,
CGImageGetColorSpace(aImage.CGImage),
CGImageGetBitmapInfo(aImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch (aImage.imageOrientation) {
caseUIImageOrientationLeft:
caseUIImageOrientationLeftMirrored:
caseUIImageOrientationRight:
caseUIImageOrientationRightMirrored:
// Grr...
CGContextDrawImage(ctx,CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);
break;
default:
CGContextDrawImage(ctx,CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage);
break;
}
// And now we just create a new UIImage from the drawing context
CGImageRef cgimg =CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImageimageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}
以上所述是小编给大家介绍的iOS拍照后图片自动旋转90度的完美解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# ios拍照旋转90度
# ios电子书翻页效果代码详解
# iOS实现翻页效果动画实例代码
# iOS图片界面翻页切换效果
# iOS实现日历翻页动画
# 实例讲解iOS中的UIPageViewController翻页视图控制器
# iOS开发中使用屏幕旋转功能的相关方法
# iOS开发中控制屏幕旋转的编写方法小结
# IOS手势操作(拖动、捏合、旋转、点按、长按、轻扫、自定义)
# iOS渐变圆环旋转动画CAShapeLayer CAGradientLayer
# iOS基于CATransition实现翻页、旋转等动画效果
# 就会
# 解决方法
# 小编
# 这是
# 很好
# 在此
# 这就是
# 会在
# 这张
# 给大家
# 要用
# 会对
# 种方法
# 用在
# 对它
# 所述
# 第一种
# 给我留言
# 就别
# 感谢大家
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
详解jQuery中的事件
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
长沙做网站要多少钱,长沙国安网络怎么样?
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何在云指建站中生成FTP站点?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
EditPlus中的正则表达式实战(6)
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Python文件操作最佳实践_稳定性说明【指导】
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
如何快速搭建高效WAP手机网站?
php 三元运算符实例详细介绍
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
微信推文制作网站有哪些,怎么做微信推文,急?
html5的keygen标签为什么废弃_替代方案说明【解答】
在线教育网站制作平台,山西立德教育官网?
网站制作免费,什么网站能看正片电影?
node.js报错:Cannot find module 'ejs'的解决办法
如何用花生壳三步快速搭建专属网站?
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
如何快速启动建站代理加盟业务?
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
如何快速上传建站程序避免常见错误?
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
想要更高端的建设网站,这些原则一定要坚持!
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
高端云建站费用究竟需要多少预算?
WEB开发之注册页面验证码倒计时代码的实现
原生JS获取元素集合的子元素宽度实例
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Laravel如何使用Collections进行数据处理?(实用方法示例)
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
JavaScript如何实现路由_前端路由原理是什么
浅析上传头像示例及其注意事项
如何快速选择适合个人网站的云服务器配置?
Python文件异常处理策略_健壮性说明【指导】
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
javascript日期怎么处理_如何格式化输出
Laravel如何升级到最新版本?(升级指南和步骤)
如何在阿里云虚拟服务器快速搭建网站?
如何快速查询网站的真实建站时间?
如何用低价快速搭建高质量网站?

