您的位置:首页 > 产品设计 > UI/UE

iOS开发之功能模块--长方形UIImage截取中间最大正方形区域

2016-08-05 16:16 519 查看
这里直接用CoreGraphics的一些处理图片的方法,本身不难,但是有些时候用的不多,就会遗忘掉使用方法的细节。下面就直接展示关键源码,以便下次重复需求,就可以立马找回。

该方法中在UIImage的类别拓展里:

-(UIImage *)cutCenterSquareImage{

CGSize imageSize = self.size;

// 中间最大正方形尺寸
CGRect centerRect;
CGFloat centerRectWH;

//根据图片的大小计算出图片中间矩形区域的位置与大小
if (imageSize.width > imageSize.height) {
centerRectWH = imageSize.height;
float leftMargin = (imageSize.width - imageSize.height) * 0.5;
centerRect = CGRectMake(leftMargin,0,centerRectWH,centerRectWH);
}else{
centerRectWH = imageSize.width;
float topMargin = (imageSize.height - imageSize.width)*0.5;
centerRect = CGRectMake(0,topMargin,centerRectWH,centerRectWH);
}

CGImageRef imageRef = self.CGImage;
//在最大正方形尺寸范围内截取
CGImageRef imageRefRect = CGImageCreateWithImageInRect(imageRef, centerRect);
UIImage *tmp = [[UIImage alloc] initWithCGImage:imageRefRect];
CGImageRelease(imageRefRect);// tmp是截取之后的image

/*
// 使用上下文,可以为上的tmp重新定位
CGSize imageRectSize = CGSizeMake(centerRectWH, centerRectWH);
CGRect imageRect = CGRectMake(0, 0, centerRectWH, centerRectWH);
UIGraphicsBeginImageContext(imageRectSize);
[tmp drawInRect:imageRect];
// 从当前context中创建一个改变大小后的图片
tmp = UIGraphicsGetImageFromCurrentImageContext();

// 使当前的context出堆栈
UIGraphicsEndImageContext();
*/

return tmp;
}


百度云链接: http://pan.baidu.com/s/1dFbTN7j 密码: kkf5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: