首页 > 代码库 > iOS开发Quzrtz2D 十:圆形图片的绘制以及加边框圆形图片的绘制

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.关闭上下文状态.

 

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