首页 > 代码库 > 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 十:圆形图片的绘制以及加边框圆形图片的绘制