iOS高级-QuartzCore框架-图片裁剪




//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 *20); 

CGContextFillPath(ctx); //画圆

//5.小圆
CGFloat smallRadius = bigRadius - borderW;
CGContextAddArc(ctx,centerX ,centerY,smallRadius,0,M_PI *20 );

//裁剪(后面画的东西才会受裁剪的影响)
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 *20); 

CGContextFillPath(ctx); //画圆

//5.小圆
CGFloat smallRadius = bigRadius - borderWidth;
CGContextAddArc(ctx,centerX ,centerY,smallRadius,0,M_PI *20 );

//裁剪(后面画的东西才会受裁剪的影响)
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];

 

posted on 2015-08-22 17:26  Marshall_Yin  阅读(523)  评论(0编辑  收藏  举报