http://blog.sina.com.cn/s/blog_6602ffbc0101ckx3.html

这里要分享的是将image旋转,而不是将imageView旋转,原理就是使用quartz2D来画图片,然后使用ctm变幻来实现旋转。

注:quartz2D的绘图左边和oc里面的绘图左边不一样,导致绘画出的图片是反转的。所以一上来得使它转正再进行进一步的旋转等
 

+ (UIImage *)image:(UIImage *)image rotation:(UIImageOrientation)orientation

{

long double rotate = 0.0;

CGRect rect;

float translateX = 0;

float translateY = 0;

float scaleX = 1.0;

float scaleY = 1.0;

switch (orientation) {

case UIImageOrientationLeft:

rotate = M_PI_2;

rect = CGRectMake(0, 0, image.size.height, image.size.width);

translateX = 0;

translateY = -rect.size.width;

scaleY = rect.size.width/rect.size.height;

scaleX = rect.size.height/rect.size.width;

break;

case UIImageOrientationRight:

rotate = 3 * M_PI_2;

rect = CGRectMake(0, 0, image.size.height, image.size.width);

translateX = -rect.size.height;

translateY = 0;

scaleY = rect.size.width/rect.size.height;

scaleX = rect.size.height/rect.size.width;

break;

case UIImageOrientationDown:

rotate = M_PI;

rect = CGRectMake(0, 0, image.size.width, image.size.height);

translateX = -rect.size.width;

translateY = -rect.size.height;

break;

default:

rotate = 0.0;

rect = CGRectMake(0, 0, image.size.width, image.size.height);

translateX = 0;

translateY = 0;

break;

}

UIGraphicsBeginImageContext(rect.size);

CGContextRef context = UIGraphicsGetCurrentContext();

//做CTM变换

CGContextTranslateCTM(context, 0.0, rect.size.height);

CGContextScaleCTM(context, 1.0, -1.0);

CGContextRotateCTM(context, rotate);

CGContextTranslateCTM(context, translateX, translateY);

CGContextScaleCTM(context, scaleX, scaleY);

//绘制图片

CGContextDrawImage(context, CGRectMake(0, 0, rect.size.width, rect.size.height), image.CGImage);

UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();

return newPic;

}

iOS将image转90,180,270度的方法的更多相关文章

  1. java解决手机上传竖拍照片旋转90\180\270度问题

    <dependency> <groupId>com.drewnoakes</groupId> <artifactId>metadata-extracto ...

  2. 通过transpose和flip实现图像旋转90/180/270度

    在fbc_cv库中,提供了对图像进行任意角度旋转的函数rotate,其实内部也是调用了仿射变换函数warpAffine.如果图像仅是进行90度倍数的旋转,是没有必要用warpAffine函数的.这里通 ...

  3. 利用exif.js解决手机上传竖拍照片旋转90\180\270度问题

    原文:https://blog.csdn.net/linlzk/article/details/48652635/ html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针 ...

  4. recovery 下界面UI旋转90 180 270修改

    原文修改出自简书:https://www.jianshu.com/p/768fdd954061 应该是MTK修改的google源码,支持recovery下屏幕旋转90/180/270, 作者把MTK的 ...

  5. 对android录制的NV21视频数据进行旋转(90,180,270)与剪切

    android默认的视频采集格式是NV21,(属于YUV420) 在onPreviewFrame中传进来的byte[] data即为NV21格式. 旋转算法 对NV21进行顺时针旋转90度,180度和 ...

  6. Java 处理 iphone拍照后 图片EXIF属性翻转90度的方法

    http://blog.csdn.net/z69183787/article/details/50320821 Java获取照片EXIF信息 http://blog.csdn.net/ghsau/ar ...

  7. iOS阶段学习第32天笔记(页面传值方法介绍)

    iOS学习(UI)知识点整理 一.界面传值方法 1.方法一  Block传值  通过SubView视图的Block向View视图传值改变View视图的背景色 实例代码: 1)SubViewContro ...

  8. 关于iOS去除数组中重复数据的几种方法

    关于iOS去除数组中重复数据的几种方法   在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢? 第一种:利用NSDictionary的AllKeys(AllValues)方 ...

  9. IOS中获取各种文件的路径介绍及方法

    IOS中获取各种文件的目录路径的方法 技术交流新QQ群:414971585 iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. docum ...

随机推荐

  1. spring cloud深入学习(十三)-----使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

    随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何快读定位 ...

  2. CentOS 6.5 Apache+SVN使用户可以自己修改密码

    yum -y install php #安装php mkdir /var/www/svnadmin #建立页面目录 vi /var/www/svnadmin/index.php #创建index.ph ...

  3. storm-jdbc的使用

    最近项目组分配到研究storm-jdbc用法 发现网上关于insert和query方法挺多的,但是自定义方法很少.而且用法上也挺多缺陷.在此自己总结记录一下 JdbcInsertBolt 的核心代码 ...

  4. Windows Apache httpd-vhosts.conf

    <VirtualHost *:> DocumentRoot "D:\wamp\www" ServerName localhost </VirtualHost> ...

  5. 现在学习 JavaScript 的哪种技术更好:Angular、jQuery 还是 Node.js?(转)

    本文选自<开发者头条>1 月 7 日最受欢迎文章 Top 3,感谢作者 @WEB资源网 分享. 欢迎分享:http://toutiao.io/contribute 这是一个发布在 Quor ...

  6. C#多线程之间事件通知

    我有两个线程,线程1接受网络数据,存到队列;线程2取队列,进行各种复杂的处理然后绘制到界面上;想让线程1有数据了通知线程2,线程2再取队列,因为不通知的话,线程2一直在while循环检索队列时候有东西 ...

  7. 【每日一linux命令7】用户及用户组

    一.查询用户及用户组相关命令 1.whoami 查询当前登录的用户名 2.groups 查询当前登录用户名所在的用户组 3.groups root 查询root用户名所在的用户组 二.怎么批量查看用户 ...

  8. web前端学习(二)html学习笔记部分(11)-- 没有标号记录的知识合集

    这一部分内容相对比较简单,就不按规矩排序了.(主要是网站上也没有这一部分内容的排序) 1.  html5的 非主体结构元素 学习笔记(1)里面记录过. 2.  html5表单提交和PHP环境搭建 1. ...

  9. webpack学习之——Entry Points(入口起点)

    1.Entry property(entry属性) 1.1 Single Entry (Shorthand) Syntax(单个入口语法) 用法:entry: string | Array<st ...

  10. Android学习笔记之mainfest文件中android属性

    android:allowTaskReparenting 是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务. -------------------------------- ...