这里直接用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是截取之后的image25 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 }
百度云链接: 密码: kkf5