IMOFilterStack 0.1.1

IMOFilterStack 0.1.1

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
Released最后发布2016年3月

Ivan Moskalev 维护。



轻松异步应用一系列 CoreImage 过滤器。纯粹的快乐。

- (void)processImage
{
    UIImage *img = [UIImage imageNamed:@"TestImage.jpg"];
    [self.greyscaleAndPixelate processImage:img completion:^(UIImage *result, NSError *error) {
        [self.imageView setImage:result];
    }];
}

- (IMOFilterStack *)greyscaleAndPixelate 
{
    return [IMOFilterStack withFilters:@[ [CIFilter filterWithName:@"CIPhotoEffectNoir"], 
                                          [CIFilter filterWithName:@"CIPixellate"] 
                                          ]];
}

为什么使用 IMOFilterStack?

因为这很酷。代码更少。可重用。声明式。

通常您需要重复以下步骤来使用 CoreImage 过滤器处理 UIImage

  • 转换为 CIImage
  • 设置一个过滤器数组
  • 遍历所有这些过滤器,将它们应用于图像
  • CIImage 转回正确的 UIImage(即基于 CIImageCGImage 的)

IMOFilterStack 实现了所有这些步骤。现在您只需要声明性地描述一个过滤器链。《惊奇》!就这么简单。

用法

按照这种方式声明一个过滤器链:

- (IMOFilterStack *)imageBeautifier
{
    return [IMOFilterStack withFilters:@[ [CIFilter filterWithName:@"CIExposureAdjust" keysAndValues:kCIInputEVKey, @(0.10f), nil],
                                          [CIFilter filterWithName:@"CIVibrance" keysAndValues:@"inputAmount", @(0.10f), nil] 
                                          ]];
}
lazy var beautifier: IMOFilterStack = {
    return IMOFilterStack(filters: [
        CIFilter(name: "CIExposureAdjust", withInputParameters: [kCIInputEVKey : NSNumber(double: 0.10)]),
        CIFilter(name: "CIVibrance", withInputParameters: ["inputAmount" : NSNumber(double: 0.10)])
        ])
}()

然后像这样使用它:

[self.imageBeautifier processImage:photo completion:^(UIImage *result, NSError *error) {
    [self.handler processedPhoto:result originalPhoto:photo];
}];
self.beautifier.processImage(photo) { (result, error) in
    self.handler?.processedPhoto(result, originalPhoto: photo)
}

completion 块在主线程上触发。如果您想改变这一点,提供您自己的 NSOperationQueue 实例用于回调。

您还可以提供(或调整)处理过程的 NSOperationQueue(例如,设置 QoS)。

IMOFilterStack 是线程安全的(已报告存在关于多个 CIFilter 实例的线程安全问题,但我还没有重现它们)。IMOFilterStack 尝试尽最大努力,在每个处理操作上运行原始过滤器数组的深度副本。

这就是所有的内容,大家。请自由地提出问题,分支和发送拉取请求。

开心地处理吧!

安装

作者

Ivan Moskalev,[email protected]

许可

IMOFilterStack 在 MIT 许可下可用。更多信息请查看 LICENSE 文件。