原图:
转换后:
- (void)viewDidLoad {
[super viewDidLoad];
//创建一个按钮
UIButton* btn = [[UIButton alloc]initWithFrame:CGRectMake(self.view.frame.size.width*0.5, self.view.frame.size.height*0.5, 60, 30)];
[btn setTitle:@"哈哈哈" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[btn setBackgroundColor:[UIColor cyanColor]];
[btn addTarget:self action:@selector(clickBtn) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview: btn];
}
-(void)clickBtn{
//创建要转换的头像
UIImage *img = [UIImage imageNamed:@"123"];
//获取一个图形上下文对象
UIGraphicsBeginImageContextWithOptions(img.size, NO, 0.0);
//获取当前图片上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
//***********开始绘制圆环****************
//定义一个圆心 和 半径
CGFloat lineWidth = 30;
CGPoint centerP = CGPointMake(img.size.width*0.5, img.size.height*0.5);
CGFloat radius = MIN(img.size.width*0.5, img.size.height*0.5);
//绘制一个圆
UIBezierPath* path = [UIBezierPath bezierPathWithArcCenter:centerP radius:radius startAngle:0 endAngle:M_PI *2 clockwise:YES];
//设置圆的状态信息
[path setLineWidth:lineWidth];
[[UIColor blackColor]set];
//加入到上下文对象
CGContextAddPath(ctx, path.CGPath);
//渲染
CGContextDrawPath(ctx, kCGPathFill);
//************开始绘制圆形相框****************
UIBezierPath* pathCirclePicture = [UIBezierPath bezierPathWithArcCenter:centerP radius:(radius-lineWidth*0.5)startAngle:0 endAngle:M_PI*2 clockwise:YES];
CGContextAddPath(ctx, pathCirclePicture.CGPath);
//裁剪
CGContextClip(ctx);
//将图片加入到上下文中
[img drawAtPoint:CGPointZero];
// 获取裁剪完毕的图片
UIImage *clipedImage = UIGraphicsGetImageFromCurrentImageContext();
//*************定义一个正方形******************
CGFloat x =( img.size.width - radius *2)*0.5;
CGFloat y = (img.size.height - radius *2)*0.5;
CGFloat width = radius*2;
CGFloat height = width;
//根据C语言类型图片 放大截图尺寸
CGFloat scale = [UIScreen mainScreen].scale;
x *= scale;
y *= scale;
width *= scale;
height *= scale;
CGRect clipRect = CGRectMake(x, y, width, height);
//将图片按照计算出的矩形裁剪
CGImageRef cgimgcliped = CGImageCreateWithImageInRect(clipedImage.CGImage, clipRect);
//把CGImage图片转换成UIimage
clipedImage = [UIImage imageWithCGImage:cgimgcliped];
//*************将裁剪好的图片保存到沙盒中***************
//获取沙河路径
NSString* docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString* fileName = [docPath stringByAppendingPathComponent:@"111.png"];
//将获取的图片转换成二进制文件
NSData *imgdata = UIImagePNGRepresentation(clipedImage);
//将图片写入到沙盒
[imgdata writeToFile:fileName atomically:YES];
//沙盒路径
NSLog(@"%@",docPath);
//裁剪完毕后,将图片显示在左上角
UIImageView* view = [[UIImageView alloc]initWithImage:clipedImage];
view.frame = CGRectMake((self.view.frame.size.width-250)/2 , (self.view.frame.size.height-250)/2,250,250);
[self.view addSubview:view];
}
-(BOOL)prefersStatusBarHidden{
return YES;
}