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

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

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

 1 -(UIImage *)cutCenterSquareImage{
 2     
 3     CGSize imageSize = self.size;
 4     
 5     // 中间最大正方形尺寸
 6     CGRect centerRect;
 7     CGFloat centerRectWH;
 8     
 9     //根据图片的大小计算出图片中间矩形区域的位置与大小
10     if (imageSize.width > imageSize.height) {
11         centerRectWH = imageSize.height;
12         float leftMargin = (imageSize.width - imageSize.height) * 0.5;
13         centerRect = CGRectMake(leftMargin,0,centerRectWH,centerRectWH);
14     }else{
15         centerRectWH = imageSize.width;
16         float topMargin = (imageSize.height - imageSize.width)*0.5;
17         centerRect = CGRectMake(0,topMargin,centerRectWH,centerRectWH);
18     }
19     
20     CGImageRef imageRef = self.CGImage;
21     //在最大正方形尺寸范围内截取
22     CGImageRef imageRefRect = CGImageCreateWithImageInRect(imageRef, centerRect);
23     UIImage *tmp = [[UIImage alloc] initWithCGImage:imageRefRect];
24     CGImageRelease(imageRefRect);// tmp是截取之后的image
25     
26     /*
27     // 使用上下文,可以为上的tmp重新定位
28     CGSize imageRectSize = CGSizeMake(centerRectWH, centerRectWH);
29     CGRect imageRect = CGRectMake(0, 0, centerRectWH, centerRectWH);
30     UIGraphicsBeginImageContext(imageRectSize);
31     [tmp drawInRect:imageRect];
32     // 从当前context中创建一个改变大小后的图片
33     tmp = UIGraphicsGetImageFromCurrentImageContext();
34     
35     // 使当前的context出堆栈
36     UIGraphicsEndImageContext();
37     */
38      
39     return tmp;
40 }

 百度云链接: http://pan.baidu.com/s/1dFbTN7j 密码: kkf5

posted @ 2016-08-05 16:16  何杨  阅读(1687)  评论(0编辑  收藏  举报