CLImageEditor
CLImageEditor 为 iPhone 应用提供基本的图像编辑功能。这个 ViewController 简单易用,也可以方便地集成到 UIImagePickerController 中。
安装
使用 CLImageEditor 最简单的方法是将 CLImageEditor 组(或目录)中的所有文件复制到您的应用中。将以下框架添加到您的项目中(构建步骤 > 链接二进制文件与库):Accelerate、CoreGraphics、CoreImage。
可选的工具有在 OptionalImageTools 中。您可能需要根据需要添加。
或使用 git 子模块
作为另一种选择,您应该能够设置一个 git 子模块 并在您的 Xcode 项目中引用这些文件。
git subtree add https://github.com/yackle/CLImageEditor.git
或 CocoaPods
CocoaPods 是 Objective-C 项目的依赖管理器。
pod 'CLImageEditor'
或
pod 'CLImageEditor/AllTools'
通过指定 AllTools 子规范,可以安装所有图片工具,包括可选工具。
可选图片工具
以下是一些可选工具。
pod 'CLImageEditor/ResizeTool'
pod 'CLImageEditor/StickerTool'
pod 'CLImageEditor/TextTool'
pod 'CLImageEditor/SplashTool'
用法
使用 CLImageEditor 非常简单。只需使用 UIimage 进行初始化并设置代理。然后您可以使用它作为常规 ViewController。
#import "CLImageEditor.h"
@interface ViewController()
<CLImageEditorDelegate>
@end
- (void)presentImageEditorWithImage:(UIImage*)image
{
CLImageEditor *editor = [[CLImageEditor alloc] initWithImage:image];
editor.delegate = self;
[self presentViewController:editor animated:YES completion:nil];
}
当与 UIImagePickerController 一起使用时,可以通过调用拾取器的 pushViewController:animated:
使 CLImageEditor 成为拾取器的一部分。
#pragma mark- UIImageController delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
CLImageEditor *editor = [[CLImageEditor alloc] initWithImage:image];
editor.delegate = self;
[picker pushViewController:editor animated:YES];
}
在编辑后,编辑器将调用代理的 imageEditor:didFinishEdittingWithImage:
方法。代理的方法是接收编辑后的图像所必需的。
#pragma mark- CLImageEditor delegate
- (void)imageEditor:(CLImageEditor *)editor didFinishEdittingWithImage:(UIImage *)image
{
_imageView.image = image;
[editor dismissViewControllerAnimated:YES completion:nil];
}
此外,还提供可选代理的 imageEditorDidCancel:
方法,以便捕获取消回调。
有关更多详细信息,请参阅 CLImageEditorDemo
。
自定义
图标图像包含在 CLImageEditor.bundle
中。您可以通过重写图标图像来更改外观。
其他用于主题设置的特性行尚未实现。
菜单自定义
可以使用 CLImageToolInfo
对图像工具进行自定义。CLImageEditor 的 toolInfo
属性包含访问每个工具信息的功能。例如,使用 subToolInfoWithToolName:recursive:
方法可以获取特定名称的工具信息。
CLImageEditor *editor = [[CLImageEditor alloc] initWithImage:_imageView.image];
editor.delegate = self;
CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLToneCurveTool" recursive:NO];
在获取工具信息后,通过更改其属性,可以在菜单视图中自定义图像工具。
CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLToneCurveTool" recursive:NO];
tool.title = @"TestTitle";
tool.available = NO; // if available is set to NO, it is removed from the menu view.
tool.dockedNumber = -1; // Bring to top
//tool.iconImagePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"png"];
dockedNumber
决定菜单项顺序。请注意,它仅用作排序的键。
可以通过以下代码确认工具名称列表。
NSLog(@"%@", editor.toolInfo);
NSLog(@"%@", editor.toolInfo.toolTreeDescription);
目前,这里有 iOS 7 的工具
CLFilterTool
CLDefaultEmptyFilter
CLDefaultLinearFilter
CLDefaultVignetteFilter
CLDefaultInstantFilter
CLDefaultProcessFilter
CLDefaultTransferFilter
CLDefaultSepiaFilter
CLDefaultChromeFilter
CLDefaultFadeFilter
CLDefaultCurveFilter
CLDefaultTonalFilter
CLDefaultNoirFilter
CLDefaultMonoFilter
CLDefaultInvertFilter
CLAdjustmentTool
CLEffectTool
CLEffectBase
CLSpotEffect
CLHueEffect
CLHighlightShadowEffect
CLBloomEffect
CLGloomEffect
CLPosterizeEffect
CLPixellateEffect
CLBlurTool
CLRotateTool
CLClippingTool
CLResizeTool
CLToneCurveTool
CLStickerTool
CLTextTool
一些工具有 optionalInfo
属性,它可以实现更详细的自定义。
剪辑工具
剪辑工具允许您设置预设比例和纵向/横向按钮的可见性。
NSArray *ratios = @[
@{@"value1":@0, @"value2":@0, @"titleFormat":@"Custom"}, // if either value is zero, free form is set.
@{@"value1":@1, @"value2":@1, @"titleFormat":@"%.1f : %.1f"},
@{@"value1":@1, @"value2":@1.618, @"titleFormat":@"%g : %g"},
@{@"value1":@2, @"value2":@3},
@{@"value1":@3, @"value2":@2},
];
CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLClippingTool" recursive:NO];
tool.optionalInfo[@"ratios"] = ratios;
tool.optionalInfo[@"swapButtonHidden"] = @YES;
缩放工具
您可以设置预设的大小和最大尺寸。
CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLResizeTool" recursive:NO];
tool.optionalInfo[@"presetSizes"] = @[@240, @320, @480, @640, @800, @960, @1024, @2048];
tool.optionalInfo[@"limitSize"] = @3200;
贴纸工具
您可以为含有贴纸图像的另一个包的目录设置路径。
CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLStickerTool" recursive:NO];
tool.optionalInfo[@"stickerPath"] = @"yourStickerPath";
许可
CLImageEditor 在MIT许可证下发布,参见 LICENSE。
致谢
图标由Freepik制作,来自www.flaticon.com,许可由CC 3.0 BY提供。