在开发中,基本上APP的用户头像的处理都需要把用户所上传的方形图片,处理为圆形图片.在这里就总结三种常见的处理圆形图片的方法.
1.使用位图上下文
2.使用UIView的layer进行处理
3.使用runtime进行处理
(1)使用位图上下文
注意点: 1)使用位图上下文所得到的image是一张全新的图片,并不是原来的那张图片
2)该方法是先设置裁剪区域,裁剪的后设定裁剪区域后,画上去的图片有效.对设定裁剪区域之前没有作用
UIImage *image = [UIImage imageNamed:@"picture"];
//1.开启一个位图上下文(大小跟图片一样大)
UIGraphicsBeginImageContext(image.size);
//2.做裁剪.(对之前已经画上去的东西,不会有做用.)
//2.1 bezierPathWithOvalInRect方法后面传的Rect,可以看作(x,y,width,height),前两个参数是裁剪的中心点,后面两个决定裁剪的区域是圆形还是椭圆.
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
//把路径设置为裁剪区域(超出裁剪区域以外的内容会自动裁剪掉.)
[path addClip];
//3.把图片绘制到上下文当中
[image drawAtPoint:CGPointZero];
//4.从上下文当中生成一张图片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
//5.关闭上下文
UIGraphicsEndImageContext();
//6.把图片显示出来
self.imageView.image = newImage;
2. 第二种方法就是使用图层,还叫做根层.
//设置圆角
self.imageV.layer.cornerRadius = 20;
//超出根层以久的内容给裁剪掉.
self.imageV.layer.masksToBounds = YES;
// self.imageV.clipsToBounds = YES;
//masksToBounds 和 clipsToBounds都能实现,但clipsToBounds的底层调用的是masksToBounds
3.使用runtime
设置图片的圆角半径,只需要在storyboard或者xib中找到你需要设定圆角半径的imageView;点击;
如图一样设置
位图上下文 和 图层的区别: 使用位图上下文进行图片裁剪,功能更加强大,能指定任意中心点,裁剪的图形发挥空间较大,有圆形和椭圆形. 使用图层(核心动画)更加简单,但更加消耗性能,iOS9之前在tableView中的cell中使用,会造成tableView卡顿,经过博主测试,iOS9之后应该苹果做了处理,不会造成卡顿了.