iOS开发Quzrtz2D 十:圆形图片的绘制以及加边框圆形图片的绘制

一:圆形图片的绘制

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageV;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    /**
     * UIBezierPath:绘制路径,就是根据路径对图形上下文进行构造
     */
    //0.加载图片
    UIImage *image = [UIImage imageNamed:@"阿狸头像"];
    //1.开启跟原始图片一样大小的上下文
    UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
    //2.设置一个圆形裁剪区域
    //2.1绘制一个圆形
    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
    //2.2.把圆形的路径设置成裁剪区域
    [path addClip];//超过裁剪区域以外的内容都给裁剪掉
    //3.把图片绘制到上下文当中(超过裁剪区域以外的内容都给裁剪掉)
    [image drawAtPoint:CGPointZero];
    //4.从上下文当中取出图片
    UIImage *newImage =  UIGraphicsGetImageFromCurrentImageContext();
    //5.关闭上下文
    UIGraphicsEndImageContext();
    
    
    self.imageV.image = newImage;
    
}



@end

裁剪图片思路.

    开启一个图片上下文.

    上下文的大小和原始图片保持一样.以免图片被拉伸缩放.

    在上下文的上面添加一个圆形裁剪区域.圆形裁剪区域的半径大小和图片的宽度一样大.

    把要裁剪的图片绘制到图片上下文当中.

    从上下文当中取出图片.

    关闭上下文.

    

    1.如何设置圆形路径?

     UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:

     CGRectMake(0, 0, image.size.width, image.size.width)];

    

     

    2.如何把一个路径设为裁剪区域?

    [path addClip];

二:带边框的圆形图片绘制

#import <UIKit/UIKit.h>

@interface UIImage (image)

/**
 *  生成一张带有边框的圆形图片
 *
 *  @param borderW     边框宽度
 *  @param borderColor 边框颜色
 *  @param image       要添加边框的图片
 *
 *  @return 生成的带有边框的圆形图片
 */
+ (UIImage *)imageWithBorder:(CGFloat)borderW color:(UIColor *)borderColor image:(UIImage *)image;

@end
#import "UIImage+image.h"

@implementation UIImage (image)


+ (UIImage *)imageWithBorder:(CGFloat)borderW color:(UIColor *)borderColor image:(UIImage *)image{
    
    //0.加载图片
    //UIImage *image = [UIImage imageNamed:@"阿狸头像"];
    //1.确定边框宽度
    //CGFloat borderW = 5;
    //2.开启一个上下文
    CGSize size = CGSizeMake(image.size.width + 2 * borderW, image.size.height + 2 * borderW);
    UIGraphicsBeginImageContextWithOptions(size, NO, 0);
    //3.绘制大圆,显示出来
    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, size.width, size.height)];
    [borderColor set];
    [path addClip];
    [path fill];//自动将路径添加到上下文
    //4.绘制一个小圆,把小圆设置成裁剪区域
    UIBezierPath *clipPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(borderW, borderW, image.size.width, image.size.height)];
   [clipPath addClip];//自动将路径添加到上下文,并且超过裁剪区域的路径直接裁减掉,此方法会裁减掉超过大圆的部分
    //5.把图片绘制到上下文当中,drawAtPoint画出的图片大小和image大小相同
    [image drawAtPoint:CGPointMake(borderW, borderW)];
    //6.从上下文当中取出图片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    //7.关闭上下文
    UIGraphicsEndImageContext();
    
    return newImage;
}




@end

具体实现思路:

1.假设边框宽度为BorderW

2.开启的图片上下文的尺寸就应该是原始图片的宽高分别加上两倍的BorderW,这样开启的目的是为了不让原始图片变形.

3.在上下文上面添加一个圆形填充路径.位置从0,0点开始,宽高和上下文尺寸一样大.设置颜色为要设置的边框颜色.

4.继续在上下文上面添加一个圆形路径,这个路径为裁剪路径.

  它的x,y分别从BorderW这个点开始.宽度和高度分别和原始图片的宽高一样大.

  将绘制的这个路径设为裁剪区域.

5.把原始路径绘制到上下文当中.绘制的位置和是裁剪区域的位置相同,x,y分别从border开始绘制.

6.从上下文状态当中取出图片.

7.关闭上下文状态.

原文地址:https://www.cnblogs.com/cqb-learner/p/5823963.html