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];

 

转载于:https://www.cnblogs.com/marshall-yin/p/4750672.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值