iOS之实现图片裁剪的几种方式
来源:互联网 发布:linux ntp配置文件 编辑:程序博客网 时间:2024/06/17 04:02
iOS之实现图片裁剪的几种方式
1.使用CGImageCreateWithImageInRect函数
- CGImageCreateWithImageInRect函数是属于Core Graphics Framework框架的,而Core Graphics Framework是一套基于C语言的框架,基于C语言的特性,它是跨平台的。因此使用此函数会使用到较多的C变量,要与OC中的对象进行转换。此函数有两个参数(CGImageRef _Nullable image, CGRect rect),第一个参数传入一个CGImageRef类型的结构体,第二参数传入CGRect类型的结构体,指出需要裁剪的区域。有一个注意点: 因为对于苹果开发者,都是基于屏幕上的点的位置进行开发的,而使用的图片又有@1x,@2x,@3x不同分辨率之分,本来开发者是不需要关心这些的。但是因为使用到了基于C语言的跨平台的框架,此函数对图片的操作都是基于像素的。需要注意这一点,否则裁剪出来的图片可能不是你想要的效果。
- 以下是实现方法
UIImage *image = [UIImage imageNamed:@"小新"]; //一张你自己的图片,无论是网络上加载的还是本地的CGImageRef partOneImageRef = CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, 0, image.size.width, image.size.height * 0.5)); // 实现把图片裁剪成平分的上下两部分,通过UIImage对象的.CGImage,可以把OC对象的UIImage转换成CGImageRef结构体。self.topImageView.image = [UIImage imageWithCGImage:topImageRef]; //使用UIImage的类方法实现加载CGImageRef类型的图片
2.使用UIGraphicsBeginImageContextWithOptions函数
- 此函数也是属于Core Graphics Framework框架的,其实在iOS中大多数涉及到图形操作的,都是基于Core Graphics Framework框架,此框架使用了Quartz作为绘图引擎(想要了解更多关于iOS绘图方面的知识,点击iOS绘图详解)。此函数是用来开启位图上下文的(更多的还有PDF图形上下文,窗口上下文,图层上下文,打印上下文),之后的所有操作都是在此上下文中进行的。此函数传入三个参数(CGSize size, BOOL opaque, CGFloat scale),第一个参数CGSize即开启的位图上下文的大小。第二个参数opaque即开启的位图山下文的不透明度,NO代表透明,YES代表不透明,一般是用透明上下文。第三个参数scale缩放比例,0代表不缩放,一般不缩放。最后生成的图片是跟上下文一样大的,这是跟第一种方法不同之处。
- 以下是实现方法:
UIImage *image = [UIImage imageNamed:@"小新"]; //一张你自己的图片,无论是网络上加载的还是本地的UIGraphicsBeginImageContextWithOptions(self.topImageView.bounds.size, NO, 0); //开启位图上下文,使用用来显示裁剪完的图片的控件的尺寸作为上下文的尺寸,好处是可以防止裁剪的图片大于控件的尺寸,造成图片拉伸UIBezierPath *clipRectPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, image.size.width, image.size.height * 0.5)]; //使用贝瑟尔路径来描述裁剪区域,也可以使用CGMutablePathRef来描述路径,其实贝瑟尔路径底层也是用CGMutablePathRef实现的,只是贝瑟尔更面向对象。[clipRectPath addClip]; //添加裁剪区域,此步骤必须在图片绘制到上下文之前做[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; //把待裁剪的图片绘制到上下文中self.topImageView.image = UIGraphicsGetImageFromCurrentImageContext(); //从上下文中获取裁剪完的图片UIGraphicsEndImageContext(); //操作完之后需要关闭上下文
3.通过操作layer层的contentsRect属性
- 在iOS中控制之所以能显示,都是因为有layer层,layer层是专门用来显示的。而UIImageView控件的图片是添加到layer的contents属性中的。所以操作layer.contentsRect属性就能控制那些部分用来显示。此属性传递一个CGRect,CGRect的四个参数的范围是0~1,这点需要注意。
- 实现如下:
self.topImageView.layer.contentsRect = CGRectMake(0, 0, 1, 0.5);
第一次写个人博客,写的不好,大家多多批评:)
0 0
- iOS之实现图片裁剪的几种方式
- IOS图片拉伸的几种方式
- ios中实现图片的裁剪
- iOS 多线程的几种实现方式
- ios 实现动画的几种方式
- IOS几种实现动画的方式
- iOS开发-裁剪图片大小图片压缩的几种常见方法
- IOS 之数据库 的几种方式
- 几种js图片裁剪
- iOS开发中拉伸图片的几种方式
- iOS 中拉伸图片的几种方式
- 两种方式实现图片按比例响应式缩放、并自动裁剪的css技巧
- 网页中图片旋转的几种实现方式
- 网页中图片旋转的几种实现方式
- Android - 实现图片圆角显示的几种方式
- Android实现图片圆角显示的几种方式
- js实现图片预览的几种方式
- 实现图片预加载的几种方式
- Linux 常规文件编辑
- [51nod 1594]Gcd and Phi
- (斯坦福机器学习笔记)线性回归练习
- Java学习日记1
- 字符串逆序输出
- iOS之实现图片裁剪的几种方式
- Java中登录页面 记住密码
- 文章标题
- 两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……
- You are using pip version 8.1.1, however version 9.0.1 is available.
- leetcode--Happy Number
- h2内存型数据库离线开发配置
- 使用SQLite数据库存储数据
- 浅析数据结构之广义表