iOS常见用户头像的圆形图片裁剪常见的几种方法

在开发中,基本上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之后应该苹果做了处理,不会造成卡顿了.

原文地址:https://www.cnblogs.com/muzichenyu/p/5995082.html