项目介绍:
GitHub地址:https://github.com/Rogue24/JPImageresizerView
JPImageresizerView
简介
仿微信裁剪图片的一个裁剪小工具。
当前版本:1.1.0
目前功能:
1.能自适应裁剪区域的缩放;
2.高自由度的参数设定,包括裁剪区域的间距、裁剪宽高比、是否自适应缩放等;
3.支持最多8个拖拽方向的裁剪区域;
4.支持上左下右的旋转;
5.水平和垂直的镜像翻转;
6.两种边框样式;
7.自定义遮罩颜色,或两种高斯模糊的遮罩;
8.自定义边框图片。
注意:
1.由于自动布局不利于手势控制,所以目前使用的是frame布局,暂不支持自动布局;
2.目前仅支持竖屏操作。
之后的更新内容:
1.Swift版本;
2.适配横竖屏切换;
3.更多新的边框和遮罩样式;
4.更多的参数设定;
5.实现苹果自带的裁剪功能中的自由拖拽旋转方向的效果。
如何使用
初始化
// 方式一:使用工厂方法配置参数
// 可设置参数:裁剪的图片、frame、遮罩样式、边框样式、动画曲线、裁剪线颜色、背景色、遮罩透明度、垂直和水平的间距、裁剪的宽高比、裁剪区域的内边距、边框图片、边框图片与边线的偏移量、可否重置的回调、是否预备缩放的回调
JPImageresizerView *imageresizerView = [[JPImageresizerView alloc]
initWithResizeImage:[UIImage imageNamed:@"Girl.jpg"]
frame:frame
maskType:JPConciseFrameType
frameType:JPConciseFrameType
animationCurve:JPAnimationCurveLinear
strokeColor:[UIColor whiteColor]
bgColor:[UIColor blackColor]
maskAlpha:0.75
verBaseMargin:10
horBaseMargin:10
resizeWHScale:0
contentInsets:UIEdgeInsetsZero
borderImage:nil
borderImageRectInset:CGPointZero
imageresizerIsCanRecovery:^(BOOL isCanRecovery) {
// 可在这里监听到是否可以重置
// 如果不需要重置(isCanRecovery为NO),可在这里做相应处理,例如将重置按钮设置为不可点或隐藏
// 具体操作可参照Demo
// 注意循环引用
}
imageresizerIsPrepareToScale:^(BOOL isPrepareToScale) {
// 可在这里监听到裁剪区域是否预备缩放至适合范围
// 如果预备缩放(isPrepareToScale为YES),此时裁剪、旋转、镜像功能不可用,可在这里做相应处理,例如将对应按钮设置为不可点或隐藏
// 具体操作可参照Demo
// 注意循环引用
}];
// 方式二:使用JPImageresizerConfigure配置好参数再创建
JPImageresizerConfigure *configure = [JPImageresizerConfigure defaultConfigureWithResizeImage:image make:^(JPImageresizerConfigure *configure) {
// 到这里已经有了默认参数值,可以在这里另外设置你想要的参数值(使用了链式编程方式)
configure.jp_resizeImage([UIImage imageNamed:@"Kobe.jpg"]).
jp_maskAlpha(0.5).
jp_strokeColor([UIColor yellowColor]).
jp_frameType(JPClassicFrameType).
jp_contentInsets(contentInsets).
jp_bgColor([UIColor orangeColor]).
jp_isClockwiseRotation(YES).
jp_animationCurve(JPAnimationCurveEaseOut);
}];
JPImageresizerView *imageresizerView = [JPImageresizerView imageresizerViewWithConfigure:self.configure imageresizerIsCanRecovery:^(BOOL isCanRecovery) {
// 可在这里监听到是否可以重置
// 如果不需要重置(isCanRecovery为NO),可在这里做相应处理,例如将重置按钮设置为不可点或隐藏
// 具体操作可参照Demo
// 注意循环引用
} imageresizerIsPrepareToScale:^(BOOL isPrepareToScale) {
// 可在这里监听到裁剪区域是否预备缩放至适合范围
// 如果预备缩放(isPrepareToScale为YES),此时裁剪、旋转、镜像功能不可用,可在这里做相应处理,例如将对应按钮设置为不可点或隐藏
// 具体操作可参照Demo
// 注意循环引用
}];
// 添加到视图上
[self.view addSubview:imageresizerView];
self.imageresizerView = imageresizerView;
// 注意:iOS11以下的系统,所在的controller最好设置automaticallyAdjustsScrollViewInsets为NO,不然就会随导航栏或状态栏的变化产生偏移
if (@available(iOS 11.0, *)) {
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
// 创建后也可以修改以上部分参数(除了maskType和contentInsets)
self.imageresizerView.resizeImage = [UIImage imageNamed:@"Kobe.jpg"];
self.imageresizerView.resizeWHScale = 16.0 / 9.0;
// initialResizeWHScale默认为初始化时的resizeWHScale,此后可自行修改initialResizeWHScale的值
self.imageresizerView.initialResizeWHScale = 0.0; // 可随意修改该参数
// 调用recoveryByInitialResizeWHScale方法进行重置,则resizeWHScale会重置为initialResizeWHScale的值
// 调用recoveryByCurrentResizeWHScale方法进行重置,则resizeWHScale不会被重置
// 调用recoveryByResizeWHScale:方法进行重置,可重置为任意resizeWHScale
更改边框样式
// 目前只提供两种边框样式,分别是简洁样式JPConciseFrameType,和经典样式JPClassicFrameType
// 可在初始化或直接设置frameType属性来修改边框样式
self.imageresizerView.frameType = JPClassicFrameType;
自定义边框图片
// 使用自定义边框图片(例:平铺模式)
UIImage *tileBorderImage = [[UIImage imageNamed:@"jp_dotted_line"] resizableImageWithCapInsets:UIEdgeInsetsMake(14, 14, 14, 14) resizingMode:UIImageResizingModeTile];
// 设置边框图片与边线的偏移量(即CGRectInset,用于调整边框图片与边线的差距)
self.imageresizerView.borderImageRectInset = CGPointMake(-1.75, -1.75);
// 设置边框图片(若为nil则使用frameType的边框)
self.imageresizerView.borderImage = tileBorderImage;
镜像翻转
// 垂直镜像,YES->沿着Y轴旋转180°,NO->还原
BOOL isVerticalityMirror = !self.imageresizerView.verticalityMirror;
[self.imageresizerView setVerticalityMirror:isVerticalityMirror animated:YES];
// 水平镜像,YES->沿着X轴旋转180°,NO->还原
BOOL isHorizontalMirror = !self.imageresizerView.horizontalMirror;
[self.imageresizerView setHorizontalMirror:isHorizontalMirror animated:YES];
旋转
// 默认逆时针旋转,旋转角度为90°
[self.imageresizerView rotation];
// 若需要顺时针旋转可设置isClockwiseRotation属性为YES
self.imageresizerView.isClockwiseRotation = YES;
重置
// 重置为初始状态,方向垂直向上,可重置为不同的resizeWHScale
// 1.按initialResizeWHScale进行重置
/**
* initialResizeWHScale默认为初始化时的resizeWHScale,此后可自行修改initialResizeWHScale的值
* 使用该方法进行重置resizeWHScale会重置为initialResizeWHScale的值
*/
[self.imageresizerView recoveryByInitialResizeWHScale];
// 2.按当前resizeWHScale进行重置(resizeWHScale不会重置为initialResizeWHScale的值)
[self.imageresizerView recoveryByCurrentResizeWHScale];
// 3.按指定resizeWHScale进行重置(自定义重置的resizeWHScale)
[self.imageresizerView recoveryByResizeWHScale:(3.0 / 4.0)];
预览
// 预览模式:隐藏边框,停止拖拽操作,用于预览裁剪后的区域
// 1.默认自带动画效果
self.imageresizerView.isPreview = YES;
// 2.自定义是否带动画效果
[self.imageresizerView setIsPreview:YES animated:NO]
裁剪
// 裁剪过程是在子线程中执行,回调则切回主线程执行
// 如果是高清图片,调用前可添加HUD提示...
// scale:压缩比例(0.0 ~ 1.0),大于等于1.0按原图尺寸裁剪,小于等于0.0则返回nil
// 例:scale = 0.5,1000 x 1000 --> 500 x 500
// 1.自定义压缩比例进行裁剪
[self.imageresizerView imageresizerWithComplete:^(UIImage *resizeImage) {
// 裁剪完成,resizeImage为裁剪后的图片
// 注意循环引用
} scale:0.7]; // 例:压缩为原图尺寸的70%
// 2.以原图尺寸进行裁剪
[self.imageresizerView originImageresizerWithComplete:^(UIImage *resizeImage) {
// 裁剪完成,resizeImage为裁剪后的图片
// 注意循环引用
}];
其他
// 锁定裁剪区域,锁定后无法拖动裁剪区域,NO则解锁
self.imageresizerView.isLockResizeFrame = YES;
// 旋转至水平方向时是否自适应裁剪区域大小
// 当图片宽度比图片高度小时,该属性默认YES,可手动设为NO
self.imageresizerView.isAutoScale = NO;
安装
JPImageresizerView 可通过CocoaPods安装,只需添加下面一行到你的podfile:
pod 'JPImageresizerView'
反馈地址
邮箱:zhoujianping24@hotmail.com
扣扣:184669029