利用Quartz2D将一张正方形的图片裁剪成一张带有圆环的图片
思路:先画一个大圆,再画一个小圆(同心圆),然后将要裁剪的图片画到小圆上,裁剪掉多余的部分。
示意图如下:
代码:
// 原图
UIImage * img = [UIImage imageNamed:@"btn_01"];
CGFloat margin = 5;// 圆环半径
CGFloat imgWidth = img.size.width + margin * 2;
CGFloat imgHeight = img.size.height + margin * 2;
CGSize size = CGSizeMake(imgWidth, imgHeight);
// 开启图片上下文
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
// 获取当前上下文
CGContextRef ref = UIGraphicsGetCurrentContext();
// 画大圆
CGFloat radius = imgWidth * 0.5;
// 圆心
CGPoint center = CGPointMake(radius, radius);
UIBezierPath * bigPath = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:0 endAngle:M_PI * 2 clockwise:YES];
// 绘制路径
CGContextAddPath(ref, bigPath.CGPath);
// 颜色
[[UIColor greenColor] set];
CGContextDrawPath(ref, kCGPathFill);
// 画小圆
UIBezierPath * smallPath = [UIBezierPath bezierPathWithArcCenter:center radius:radius - margin startAngle:0
endAngle:M_PI * 2 clockwise:NO];
CGContextAddPath(ref, smallPath.CGPath);
// 裁剪
CGContextClip(ref);
[img drawAtPoint:CGPointMake(margin, margin)];
UIImage * newImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//self.imgView.backgroundColor = [UIColor redColor];
self.imgView.image = newImg;
效果图