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. React 组件&Props

    组件&Props 组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你就只需要专注于构建每一个单独的组件. 组件从概念上看就像是函数,它可以接受任意的输入值(称之为& ...

  2. 19-10-18-Y

    ZJ一下: 感觉能拿到的分都拿到了,至于后来改题就缶了 其实是:太tui导致没改好 TJ: T1: 正解是$\mathsf{KMP}$,但是广大群众都用了$\mathsf{hash}$…… 发现了一个 ...

  3. JasperReport查看和打印报告7

    报表填充过程JasperPrint对象的输出可以使用内置的浏览器组件来查看,打印或导出到更多的流行的文件格式,如PDF,HTML,RTF,XLS,ODT,CSV或XML.Jasper文件查看和打印将包 ...

  4. 2019-8-31-C++-驱动开发-error-LNK2019-unresolved-external-symbol-__CheckForDebuggerJustMyCode-referenced-...

    title author date CreateTime categories C++ 驱动开发 error LNK2019 unresolved external symbol __CheckFor ...

  5. TZ_07_SSM整合

    1.坐标版本控制: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  6. thinkphp用swiftmailer发邮件demo

    QQ邮箱 include_once APPPATH . 'libraries/swiftmailer/swift_required.php'; $transport = Swift_SmtpTrans ...

  7. Pycharm 2018激活(Mac版)

    第一步,修改host文件 目的:是屏蔽掉Pycharm对激活码的验证 路径:/etc/hosts 在文件最后一行添加文本: 0.0.0.0 account.jetbrains.com 修改后文件如下: ...

  8. org.openqa.selenium.ElementNotInteractableException: element not interactable

    F12查看元素确实存在的 有人说延长加载时间 webDriver.manage().timeouts().implicitlyWait(, TimeUnit.SECONDS); // 等待5秒加载完成 ...

  9. Appium_Python_Client介绍

    一.Appium_Python_Client介绍 Appium的实用方法都藏在Client的源码里,对于driver和webelement实例,均有对应的元素查找方法(webelement查找的是下面 ...

  10. 洛谷P2196 挖地雷 [2017年4月计划 动态规划13]

    P2196 挖地雷 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之 ...