- (void)circleHeadPortrait
{
// 1.加载原图
UIImage *oldImage = [UIImage imageNamed:@"me"];
// 2.开启一个和图片一样大小的上下文,也就是开启一个新的图片,新图片大小和原图片一致
UIGraphicsBeginImageContextWithOptions(oldImage.size, NO, 0.0);
// 3.取得当前的上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 4.画圆
CGRect circleRect = CGRectMake(0, 0, oldImage.size.width, oldImage.size.height);
CGContextAddEllipseInRect(ctx, circleRect);
// 5.按照当前的路径形状(圆形)裁剪, 超出这个形状以外的内容都不显示
CGContextClip(ctx);
// 6.画图
[oldImage drawInRect:circleRect];
// 7.取图
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
// 8.结束
UIGraphicsEndImageContext();
// 9.写出文件
NSData *data = UIImagePNGRepresentation(newImage);
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"new.png"];
[data writeToFile:path atomically:YES];
// 10.显示图片
self.iconView.image = newImage;
}
// 制作带光圈的头像
- (void)viewDidLoad
{
[super viewDidLoad];
// 头像外环宽
CGFloat headLine = 2;
UIImage *img = [UIImage imageNamed:@"me"];
CGFloat bigCricleW = img.size.width + 2*headLine;
CGFloat bigCricleH = img.size.height + 2*headLine;
CGSize size = CGSizeMake(bigCricleW, bigCricleH);
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
CGContextRef ref = UIGraphicsGetCurrentContext();
// 大圆
[[UIColor whiteColor]set];
CGFloat bigCircleRadius = bigCricleW * 0.5;
CGFloat bigCirCleX = bigCricleW * 0.5;
CGFloat bigCirCleY = bigCricleH * 0.5;
CGContextAddArc(ref, bigCirCleX, bigCirCleY, bigCircleRadius, 0, M_PI * 2, 0);
CGContextFillPath(ref);
// 小园
CGContextAddArc(ref, bigCirCleX, bigCirCleY, img.size.width * 0.5, 0, M_PI * 2, 0);
// 裁剪
CGContextClip(ref);
[img drawInRect:CGRectMake(headLine, headLine, img.size.width, img.size.height)];
// 将图片显示到view上
self.imageView.image = UIGraphicsGetImageFromCurrentImageContext();
// 关闭上下文
UIGraphicsEndImageContext();
}