//1.加载原图 UIImage *oldImage = [UIImage imageNamed:@"me"]; //2.开启上下文 CGFloat borderW = 2; //圆环的宽度 CGFloat imageW = oldImage.size.width + 2 * borderW; CGFloat imageH = oldImage.size.height + 2 * borderH; CGSize imageSize = CGSizeMake(imageW,imageH); UIGraphicsBeginImageContextWithOptions(imageSize,NO,0.0); //3.取得当前的上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //4.画边框(大圆) [[UIColor whiteColor] set]; CGFloat bigRadius = imageW * 0.5; //大圆半径 CGFloat centerX = bigRadius; CGFloat centerY = bigRadius; CGContextAddArc(ctx,centerX ,centerY,bigRadius,0,M_PI *2,0); CGContextFillPath(ctx); //画圆 //5.小圆 CGFloat smallRadius = bigRadius - borderW; CGContextAddArc(ctx,centerX ,centerY,smallRadius,0,M_PI *2,0 ); //裁剪(后面画的东西才会受裁剪的影响) CGContextClip(ctx); //6.画图 [oldImage drawInRect:CGRectMake(borderW,borderW, oldImage.size.width,oldImage.size.height)]; //7.取图 UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); //8.结束上下文 UIGraphicsEndImageContext(); //9.显示图片 PS:先监听新拖的ImageView self.iconView.image = newImage; //10.写入文件 NSData *data = UIImagePNGRepresentation(newImage) ; NSString *path = [[NSSearchPathForDirectoriesInDomains (NSDocumentDirectory,NSUserDomainMask,YES) lastObject] stringByAppendingPathComponent:@"new.png"]; [data writeToFile:path atomically:YES];
将图片裁剪封装起来
1.新建一个类,提供一个类方法
+(instancetype)circleImageWithName:(NSString *)name borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)borderColor { //1.加载原图 UIImage *oldImage = [UIImage imageNamed:name]; //2.开启上下文 CGFloat imageW = oldImage.size.width + 2 * borderWidth; CGFloat imageH = oldImage.size.height + 2 * borderH; CGSize imageSize = CGSizeMake(imageW,imageH); UIGraphicsBeginImageContextWithOptions(imageSize,NO,0.0); //3.取得当前的上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //4.画边框(大圆) [borderColor set]; CGFloat bigRadius = imageW * 0.5; //大圆半径 CGFloat centerX = bigRadius; CGFloat centerY = bigRadius; CGContextAddArc(ctx,centerX ,centerY,bigRadius,0,M_PI *2,0); CGContextFillPath(ctx); //画圆 //5.小圆 CGFloat smallRadius = bigRadius - borderWidth; CGContextAddArc(ctx,centerX ,centerY,smallRadius,0,M_PI *2,0 ); //裁剪(后面画的东西才会受裁剪的影响) CGContextClip(ctx); //6.画图 [oldImage drawInRect:CGRectMake(borderWidth,borderWidth, oldImage.size.width,oldImage.size.height)]; return newImage; }
2.调用这个类方法拿到裁剪好的图片
//1.取图 UIImage *newImage = [UIImage circleImageWithName:@"me" borderWidth:2 borderColor:whiteColor]; //2.结束上下文 UIGraphicsEndImageContext(); //3.显示图片 PS:先监听新拖的ImageView self.iconView.image = newImage; //4.写入文件 NSData *data = UIImagePNGRepresentation(newImage) ; NSString *path = [[NSSearchPathForDirectoriesInDomains (NSDocumentDirectory,NSUserDomainMask,YES) lastObject] stringByAppendingPathComponent:@"new.png"]; [data writeToFile:path atomically:YES];