//0.加载要裁剪的图片
UIImage * image = [UIImage imageNamed:@"dst2"];
//1.开启一个图形上下文对象 (图片类型 bitmap) 大小个图片一样大
// UIGraphicsBeginImageContext(<#CGSize size#>)
//参数1:大小 参数2:是否不透明 参数3:缩放比
UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0);//0.0使用当前设备的缩放比
//2.获取刚刚开启的图形上下文对象
CGContextRef ctx = UIGraphicsGetCurrentContext();
//3.创建圆形路径
//3.1 计算圆心 (图片中心点)
CGPoint centerP = CGPointMake(image.size.width/2, image.size.height/2);
//3.2 计算半径 (图片最小边的一半)
CGFloat radius = MIN(image.size.width, image.size.height)/2;
UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:centerP radius:radius startAngle:0 endAngle:2 * M_PI clockwise:YES];
//4.添加 路径
CGContextAddPath(ctx, path.CGPath);
//5.执行裁剪
CGContextClip(ctx);
//6.绘制图片
[image drawAtPoint:CGPointZero];
//7.从图形上下文中获取图片
UIImage * getImage = UIGraphicsGetImageFromCurrentImageContext();
//7.1----------切割图片----------------------
// 计算 x y w g
CGFloat x = 0;
CGFloat y = (image.size.height - 2 * radius) / 2;
CGFloat w = 2 * radius;
CGFloat h = w;
//获取当前设备的缩放比
CGFloat scale = [UIScreen mainScreen].scale;
x *= scale;
y = y * scale;
w *= scale;
h *= scale;
//参数1:要切割的图片 参数2:切割区域
CGImageRef imageRef = CGImageCreateWithImageInRect(getImage.CGImage, CGRectMake(x, y, w, h));
// CGImageRef-->UIImage
getImage = [UIImage imageWithCGImage:imageRef];
//7.1----------切割图片----------------------
//8.结束图形上下文对象
UIGraphicsEndImageContext();
//9.使用图片
self.imageView.image = getImage;
//9.1 保存相册
//参数1:保存的图片 参数2:调用哪个类的方法 参数3:保存完毕要调用哪个方法 参数4:追踪信息
UIImageWriteToSavedPhotosAlbum(getImage, self, @selector(image:didFinishSavingWithError:contextInfo:), @"hello");
//9.2 保存到沙盒
//获取documents
NSString * docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//拼接文件名
NSString * fileName = [docDir stringByAppendingPathComponent:@"001.png"];
//转化Data
NSData * imageData = UIImagePNGRepresentation(getImage);
//保存
[imageData writeToFile:fileName atomically:YES];
网友评论