iOS开发>学无止境 - 截取UIImage指定大小区域
2015-11-29 00:11
597 查看
最近遇到这样的需求:从服务器获取到一张照片,只需要显示他的左半部分,或者中间部分等等。也就是截取UIImage指定大小区域。
运行一下:
要对UIImage进行裁剪,首先导入头文件:
在上面
截取成功,还可以截取其他区域的,只需要传入不同的
UIImage扩展
我的解决方案是对UIImage进行扩展。通过
CGImageRef和
CGImage完成截取,调用的方法是:
CGImageCreateWithImageInRect。扩展类叫
UIImage+Crop,具体代码如下:
UIImage+Crop.h
#import <UIKit/UIKit.h> typedef NS_ENUM(NSInteger, XYCropImageStyle){ XYCropImageStyleRight =0, // 右半部分 XYCropImageStyleCenter =1, // 中间部分 XYCropImageStyleLeft =2, // 左半部分 XYCropImageStyleRightOneOfThird =3, // 右侧三分之一部分 XYCropImageStyleCenterOneOfThird =4, // 中间三分之一部分 XYCropImageStyleLeftOneOfThird =5, // 左侧三分之一部分 XYCropImageStyleRightQuarter =6, // 右侧四分之一部分 XYCropImageStyleCenterRightQuarter =7, // 中间右侧四分之一部分 XYCropImageStyleCenterLeftQuarter =8, // 中间左侧四分之一部分 XYCropImageStyleLeftQuarter =9, // 左侧四分之一部分 }; @interface UIImage (Crop) - (UIImage *)imageByCroppingWithStyle:(XYCropImageStyle)style; @end
UIImage+Crop.m
#import "UIImage+Crop.h" @implementation UIImage (Crop) - (UIImage *)imageByCroppingWithStyle:(XYCropImageStyle)style { CGRect rect; switch (style) { case XYCropImageStyleLeft: rect = CGRectMake(0, 0, self.size.width/2, self.size.height); break; case XYCropImageStyleCenter: rect = CGRectMake(self.size.width/4, 0, self.size.width/2, self.size.height); break; case XYCropImageStyleRight: rect = CGRectMake(self.size.width/2, 0, self.size.width/2, self.size.height); break; case XYCropImageStyleLeftOneOfThird: rect = CGRectMake(0, 0, self.size.width/3, self.size.height); break; case XYCropImageStyleCenterOneOfThird: rect = CGRectMake(self.size.width/3, 0, self.size.width/3, self.size.height); break; case XYCropImageStyleRightOneOfThird: rect = CGRectMake(self.size.width/3*2, 0, self.size.width/3, self.size.height); break; case XYCropImageStyleLeftQuarter: rect = CGRectMake(0, 0, self.size.width/4, self.size.height); break; case XYCropImageStyleCenterLeftQuarter: rect = CGRectMake(self.size.width/4, 0, self.size.width/4, self.size.height); break; case XYCropImageStyleCenterRightQuarter: rect = CGRectMake(self.size.width/4*2, 0, self.size.width/4, self.size.height); break; case XYCropImageStyleRightQuarter: rect = CGRectMake(self.size.width/4*3, 0, self.size.width/4, self.size.height); break; default: break; } CGImageRef imageRef = self.CGImage; CGImageRef imagePartRef = CGImageCreateWithImageInRect(imageRef, rect); UIImage *cropImage = [UIImage imageWithCGImage:imagePartRef]; CGImageRelease(imagePartRef); return cropImage; }
实际运用
简单测试一下,看看有没有实现我们想要的效果。首先,先加载一个完整的UIImageView。这个应该不难。代码如下:UIImageView *imgView = [[UIImageView alloc] init]; imgView.frame = CGRectMake((SCREEN.width - 226) / 2, 100, 226, 106); UIImage *image = [UIImage imageNamed:@"ganggang"]; imgView.image = image; [self.view addSubview:imgView];
运行一下:
要对UIImage进行裁剪,首先导入头文件:
#import "UIImage+Crop.h"
在上面
UIImage *image = [UIImage imageNamed:@"ganggang"];这段代码之后加上下面这句:
image = [image imageByCroppingWithStyle:XYCropImageStyleLeft];
XYCropImageStyleLeft是截取照片的左半部分。效果如下:
截取成功,还可以截取其他区域的,只需要传入不同的
XYCropImageStyle即可实现。以上代码依然在iOSStrongDemo里。
相关文章推荐
- iOS开发>学无止境 - UIImage等比缩放
- iOS开发>学无止境 - 自定义导航按钮UIBarButtonItem
- 阿里巴巴内部资料 | 交互设计全档案
- UIImagePickerController
- Vue.js 的一些资源索引
- Android详细的对话框AlertDialog.Builder使用方法
- iOS开发>学无止境 - 多个UIImage合并成一个UIImage
- iOS开发>学无止境 - UIImage图片无限滚动的实现
- iOS开发>学无止境 - UIStackView如何让你的开发更简单
- iOS开发>学无止境 - UITablView上下滑动控制底部按钮的出现和消失
- EasyUI添加tab页签
- iOS开发>学无止境 - UICollectionView自定义布局之风火轮[译]
- 由position: sticky; 想到的
- pat 1007. Maximum Subsequence Sum (25)
- Android中SpannableStringBuilder用法小结
- QUICK 中的触摸事件
- UVa 11775 Unique Story
- 细聊UIView动画中的那些参数
- bzoj 1567 JSOI2008]Blue Mary的战役地图【二维字符串哈希】【水题】
- Java的ArrayDeque使用例程