裁剪带圆环的圆形的图片步骤:
1.加载图片
UIImage *image = [UIImage imageNamed:@"dst2"];
2.开启图形上下文对象begin(后需要关闭end)
因为圆环上下文的size比图片大一些。
CGFloat margin = 5;
CGSize ctxSize = CGSizeMake(image.size.width +2*margin , image.size.height + 2*margin);
UIGraphicsBeginImageContextWithOptions(ctxSize, YES, 0);
3.获取开启的上下文对象
CGContextRef ctx = UIGraphicsGetCurrentContext();
4.确定圆形的圆环的半径与圆心
CGPoint centerP = CGPointMake(ctxSize.width/2, ctxSize.height/2);
CGFloat radius = MIN(image.size.width, image.size.height)/2;
5.裁减圆形和绘制圆环。
/ 创建一个圆环/
UIBezierPath *pathLine = [UIBezierPath bezierPathWithArcCenter:centerP radius:radius startAngle:0 endAngle:2*M_PI clockwise:YES];
CGContextSetLineWidth(ctx, 10);
[[UIColor redColor]set];
CGContextAddPath(ctx, pathLine.CGPath);
CGContextDrawPath(ctx, kCGPathStroke);
/创建一个圆环
/裁减圆形
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:centerP radius:radius startAngle:0 endAngle:2*M_PI clockwise:YES];
CGContextAddPath(ctx, path.CGPath);
CGContextClip(ctx);
/裁减圆形 /
(注意:圆环在前,圆形在后,否则看不到圆环)
6.绘制图片
[image drawAtPoint:CGPointMake(margin, margin)];
7.获取裁剪后图片
UIImage *getImage = UIGraphicsGetImageFromCurrentImageContext();
//此时判断是否需要对图片进行适应屏幕的裁减。(比如长宽不等图片可能会出现压缩,需要裁剪成方形)
//7.截取图片(之前需要先将图片添加到图形上下文中,然后获取到再截取)
CGFloat x;
CGFloat y;
CGFloat w;
CGFloat h;
//a.当是竖屏照片时
if (getImage.size.height >=getImage.size.width) {
x = 0;
y = (getImage.size.height - 2*radius)/2;
}else{
//b.当时横屏照片时
y = 0;
x = (getImage.size.width - 2*radius)/2;
}
w = 2*radius;
h = w;
//为保证图片的正确显示,乘以屏幕缩放比
CGFloat scale = [UIScreen mainScreen].scale;
x *= scale;
y *= scale;
w *= scale;
h *= scale;
//截取 CG开头C语言。不用*
CGImageRef imageRef = CGImageCreateWithImageInRect(getImage.CGImage, CGRectMake(x, y, w, h));
//转换格式
getImage = [UIImage imageWithCGImage:imageRef];
8.关闭之前开启的上下文
UIGraphicsEndImageContext();
9.给imageView的image赋值。