图片大小调整:

此处是写在UIImage分类中的方法self即为image,size为自己传入的大小,根据size生成图片图片不会被剪裁,但可能会被拉伸变形。

- (UIImage *)thumWithSize:(CGSize)size{UIGraphicsBeginImageContext(size);[self drawInRect:CGRectMake(0, 0, size.width, size.height)];UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return newImage;
}

图片方向调整:

利用已经定义好的宏定义

typedef NS_ENUM(NSInteger, UIImageOrientation) {UIImageOrientationUp,            // default orientationUIImageOrientationDown,          // 180 deg rotationUIImageOrientationLeft,          // 90 deg CCWUIImageOrientationRight,         // 90 deg CWUIImageOrientationUpMirrored,    // as above but image mirrored along other axis. horizontal flipUIImageOrientationDownMirrored,  // horizontal flipUIImageOrientationLeftMirrored,  // vertical flipUIImageOrientationRightMirrored, // vertical flip
};

以上是UIImage自带的宏定义(下面介绍没有按照以上顺序)

UIImageOrientationUp:表示图片的正常状态

UIImageOrientationUpMirrored:表示图片的正常状态的镜面图像

UIImageOrientationDown:表示图片被翻转180°

UIImageOrientationDownMirrored:表示图片被翻转180°后的镜面图像

UIImageOrientationLeft:表示图片被逆时针翻转90°

UIImageOrientationLeftMirrored:表示图片被逆时针翻转90°后的镜面图像

UIImageOrientationRight:表示图片被顺时针翻转90°

UIImageOrientationRightMirrored:表示图片被顺时针翻转90°后的镜面图像

如图:

介绍两种图片位置和方向调整的方法(都是对坐标系的调整)

第一种:

(平移)正数xy变大的方向 负数xy缩小的方向

CGAffineTransformTranslate

CGAffineTransformMakeTranslation

(旋转)正数顺时针 负数逆时针

CGAffineTransformRotate

CGAffineTransformMakeRotation

(缩放)当值为负数的时候表示翻转,x为-1则沿Y轴翻转

CGAffineTransformScale

CGAffineTransformMakeScale

CGAffineTransform transform = CGAffineTransformIdentity;
 
transform = CGAffineTransformMakeTranslation(20, 20);
等同于
transform = CGAffineTransformTranslate(transform, 20, 20);
 其它的旋转,和缩放操作也是一样。

但如果需要连续操作
 如:先平移后旋转

transform = CGAffineTransformMakeTranslation(self.size.width, self.size.height);//平移
 transform = CGAffineTransformRotate(transform, M_PI/9);//旋转

则第二个需要采用用没有make的形式,表示在第一个操作的基础上进行第一个操作,如果连续使用带make的形式则只会保留最后一个操作。

另外推荐最后进行旋转操作 优先进行平移操作,方便坐标系判断。

第二种:

CGContextTranslateCTM(平移)

CGContextRotateCTM(旋转)

CGContextScaleCTM(缩放)

对图片的操作与第一种相似,只是参数不同,使用过程中会看见区别。

图片方向调整讲解:

  UIImageView * imageView = [self.view viewWithTag:100 + 1];UIImage * image1 = imageView.image;CGImageRef  cgimage = image1.CGImage;UIGraphicsBeginImageContext(image1.size);CGContextDrawImage(UIGraphicsGetCurrentContext(),CGRectMake(0, 0, image1.size.width, image1.size.height), cgimage);//绘制图片UIImage * image2 = UIGraphicsGetImageFromCurrentImageContext();//取出图片UIGraphicsEndImageContext();imageView.image = image2;

imageView为已经创建好的UIImageView,这里重新绘制,再没有进行任何

CGAffineTransformTranslate或者是CGContextTranslateCTM等操作的情况下,图片将是这样的(后者):

所以实际上我们对图片的方向的修改是对后面这张图片进行操作,

以UIImageOrientationUpMirrored为例:

(self即为image)

CGAffineTransform transform = CGAffineTransformIdentity;
CGSize size = self.size;transform = CGAffineTransformMakeTranslation(size.width, size.height);//平移
transform = CGAffineTransformRotate(transform, M_PI);//顺时针旋转180度UIGraphicsBeginImageContext(size);
CGContextRef contextRef = UIGraphicsGetCurrentContext();
CGContextConcatCTM(contextRef, transform);
CGContextDrawImage(UIGraphicsGetCurrentContext(),CGRectMake(0, 0, self.size.width, self.size.height), self.CGImage);//绘制图片
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();//取出图片
UIGraphicsEndImageContext();

关键代码

transform = CGAffineTransformMakeTranslation(size.width, size.height);//平移
transform = CGAffineTransformRotate(transform, M_PI);//顺时针旋转180度

将图像(后者图像)进行平移平移后旋转180°,可以用一个长方形的书本进行操作执行完之后应该得到这样一个图像(后者):

所以图片方向的调整只需利用其中一种方法便可实现,但是有些方向使用一种方法,可能需要多个步骤,而坐标系在被进行非平移(如旋转,翻转)等操作后不容易判断x 轴 y轴方向,所以需要利用两个方法进行更改。(第一种方法引起的坐标系的变化不会影响第二种方法中使用的坐标系)

如:UIImageOrientationLeft和UIImageOrientationRight,都是两步达不到目的的。

以UIImageOrientationLeft为例:

将图片: 

进行第一步操作,由于图片需要被放倒所以要交换图片的宽高。

(self即为image)

CGAffineTransform transform = CGAffineTransformIdentity;
CGSize size = self.size;
size = CGSizeMake(size.height, size.width);transform = CGAffineTransformMakeTranslation(size.width,0);//平移
transform = CGAffineTransformRotate(transform, M_PI/2);

还是可以利用书本比对着进行操作 平移加上顺时针旋转90度后图片应该是这个样子:

之后将此图片进行平移 和 翻转

UIGraphicsBeginImageContext(size);
CGContextRef contextRef = UIGraphicsGetCurrentContext();CGContextTranslateCTM(contextRef,0.0,size.height);
CGContextScaleCTM(contextRef, 1.0, -1.0);CGContextConcatCTM(contextRef, transform);//
CGContextDrawImage(UIGraphicsGetCurrentContext(),CGRectMake(0, 0, self.size.width, self.size.height), self.CGImage);//绘制图片
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();//取出图片
UIGraphicsEndImageContext();

则可得到目标图像:

更多方向及具体操作可以在Demo中查看

CSDN下载地址

GitHub下载地址

image图片大小调整和方向调整(UIImageOrientation)相关推荐

  1. linux命令操作改变图片大小,使用linux命令调整图片大小、格式等

    mogrify --- 修改图片的大小 mogrify -resize 800X600 file.jpg file.jpg将被调整到800*600的大小.注意,如果原始图片的大小是1200*900,那 ...

  2. dw如何设置html图片大小,Dreamweaver如何设置图像属性?DW设置图像属性方法介绍

    Dreamweaver中如何设置图像属性?下面小编就为大家详细介绍一下,一起来看看吧! 方法/步骤 在dreamweaver中如何设置图片属性,首先我们需要打开这个工具,随后进行一个新的HTML界面的 ...

  3. 怎么把图片尺寸变大?手机怎么修改图片大小?

    我们在社交平台上传封面图.头像的时候,经常会因为上传的图片尺寸太小导致系统自动将图片扩大(在线修改图片尺寸大小工具-压缩图),然后图片就变模糊了.有没有图片扩大尺寸又保证了清晰度的方法呢?其实可以用专 ...

  4. python调整图片大小不覆盖exif_python---基础知识回顾(十一)图像处理模块PIL

    前戏: 虽然PIL没有入OpenCV那样强大的功能,但是所提供的功能,在一般的图像处理中足够使用. 图像类别: 计算机绘图中有两类图像:一类是矢量图,另一类是点阵图(位图) 矢量图: 基于计算机数字对 ...

  5. Python调整图片大小并保存调整后的图像

    Python调整图片大小并保存调整后的图像 目录 Python调整图片大小并保存调整后的图像 #原始图像

  6. Linux中如何使用gThumb批量调整图片大小

    2019独角兽企业重金招聘Python工程师标准>>> 由于主要步骤都以 gThumb 为中心,所以请先确保你在系统中已经安装了该应用.如果没有,可以自行在 Ubuntu Softw ...

  7. 服务器里怎么更改网站图片大小,php实现在服务器端调整图片大小的方法

    本文实例讲述了php实现在服务器端调整图片大小的方法.分享给大家供大家参考.具体分析如下: 在服务器端完成图片大小的调整,会比在浏览器的处理有很多的好处. 本文介绍了PHP如何在服务器端调整图片大小. ...

  8. 如何改变图片尺寸?怎么调整图片大小?

    怎么调整图片大小?当我们遇到图片尺寸过大时可以利用压缩图的图片改大小(https://www.yasuotu.com/size)功能来修改图片尺寸,一起来看看具体步骤. 1.进入压缩图首页选择图片改大 ...

  9. java 图片 大小_在JAVA中调整图片大小

    在JAVA中,当我们调整图片的大小或比例时,我们可以按照以下的步棸: 通过调用的ImageIO类的read(File)方法 创建用于输入图片BufferedImage对象. 按所需输出高度输出的Buf ...

最新文章

  1. druid+spring配置
  2. 浅谈.Net WebService开发
  3. Ubuntu install of ROS Melodic
  4. Google小组研发模式分析
  5. 详细的DedeCMS(织梦)目录权限安全设置教程
  6. sdut 数据结构实验之二叉树六:哈夫曼编码
  7. webpack打包教程
  8. Android 进度条改变图片透明度
  9. 数组练习:各种数组方法的使用
  10. maven2 clean 错误的解决
  11. 通过组策略集中管理管理用户桌面和开始菜单
  12. 红外图分特点析及红外图像分割
  13. AlphaGo来了,终结者不远了
  14. 怎么把分开的pdf放在一起_两个合并到一起的pdf怎么拆分?
  15. 计算机系统时间显示不准确的原因,电脑时间总是不对原因 电脑时间总是不对三种解决方案...
  16. Super-pack按键精灵安卓离线打包发布
  17. 工业互联网发展行动计划(2018-2020年)
  18. c语言void delay是什么意思,delay是什么意思(单片机中delay)
  19. uva11401:Triangle Counting 递推 数学
  20. Unity 径向模糊 简易解决方案

热门文章

  1. qq邮箱imtp收件服务器,qq邮箱代收outlook
  2. 计算机64位只有2g,电脑插了4G内存,但只有2G左右可以用,为什么 WIN7 64位
  3. 物联网卡解决智能安防系统监控难题,开启全新安防时代
  4. 如何在Ubuntu系统下使用扫描仪(by quqi99)
  5. CVPR2020论文分方向整理之检测篇_3D目标检测(代码/论文解读/136篇打包下载)
  6. 系统分析与设计期末课程总结
  7. 关于阿里云视频点播出现的问题
  8. SWR 与前端数据依赖请求
  9. 完美卸载2011 绿色版软件下载 完美卸载官网
  10. 零基础入门金融风控之贷款违约预测挑战赛-task01