iOS上的图像处理滤镜,例如白平衡、曝光、分色调等。

6

我已经尝试了一个星期来实现一些图像处理滤镜,比如白平衡、曝光和分色调(就像Photoshop中的那样)用于我的IOS应用程序,但是我没有得到标准的实现来实现它们中的任何一个。

我发现了通过ImageMagick实现它们的shell脚本

但是不知道如何将这些脚本更改为C或Objective C中的等效脚本。 我只是使用一些转换命令来完成魔术操作。

提前感谢您的帮助。请帮忙。

白平衡也可以通过更改图像的色温和色调来实现。所以如果有人知道如何操纵这些图像的色调和色温,请帮助我。谢谢。

2个回答

14

iOS 5开始,可以使用Core Image滤镜

以下是一个非常简化的示例,假设你已经在Interface Builder中添加了一个名为imageView的UIImageView IBOutlet,并使用图像文件进行了设置。

  1. 添加CoreImage框架。
  2. #import <CoreImage/CoreImage.h>
  3. viewDidLoad中,添加以下内容:

    CIImage *inputImage = [[CIImage alloc] initWithImage:self.imageView.image];
    CIFilter *exposureAdjustmentFilter = [CIFilter filterWithName:@"CIExposureAdjust"];
    [exposureAdjustmentFilter setDefaults];
    [exposureAdjustmentFilter setValue:inputImage forKey:@"inputImage"];
    [exposureAdjustmentFilter setValue:[NSNumber numberWithFloat:5.0f] forKey:@"inputEV"];
    CIImage *outputImage = [exposureAdjustmentFilter valueForKey:@"outputImage"];
    CIContext *context = [CIContext contextWithOptions:nil];
    self.imageView.image = [UIImage imageWithCGImage:[context createCGImage:outputImage fromRect:outputImage.extent]];
    
    另一个选择可能是使用来自GitHub ios-image-filters项目的过滤器。

另一个选项可能是使用 GitHub ios-image-filters 项目中的过滤器。


非常感谢您的快速回复。我已经阅读了苹果关于CoreImage的文档,并且很高兴它终于在IOS上可用了。但不幸的是,我的当前应用程序是在IOS 4上,我没有升级的选项。如果您能指导我一些关于此事的内容而不涉及CoreImage,那么请帮助我。再次感谢。 - Nawaz

9
作为 iOS图片滤镜 的作者,我可以告诉你,我们的项目有一个可以使用的级别方法来修改白平衡。它是作为UIImage类别实现的,并模仿Photoshop过滤器,因此调用它非常简单:
[self.imageView.image levels:0 mid:128 white:255];

此外,它不仅与iOS 5兼容,还与iOS 3和4兼容。它是开源的,并且没有依赖关系,因此如果您找不到所需的过滤器,修改应该很容易。

我借此机会真心感谢您发布了如此精彩的图像处理示例项目。非常感谢! - Nawaz
我已经仔细研究过了。您建议使用级别来实现白平衡似乎没有产生结果。我需要它可以调整。我尝试了不同范围的值,但结果不理想。您能给我提些建议吗?另外,曝光方面怎么样?再次感谢。 - Nawaz
嗨,esilver。好的,我在代码中做了一些更改。'code' [self setSliderMin:64.0 Max:128.0 Value:64.0];(自定义函数来配置滑块)'code' self.imageView.image = [image levels:0 mid:(192.0 - value) white:255]; 我得到的结果更像是曝光而不是白平衡。 现在我有点困惑,不太清楚我实际上正在实现什么。请解释一下。 谢谢。 - Nawaz
根据我对Photoshop和图像处理的理解,要修改“白平衡”,实际上是将原始图像中的一个颜色值映射为纯白色,然后在0到所选颜色之间的所有颜色上应用统一的映射。曲线滤镜允许您创建非统一映射。在Photoshop中进行级别和曲线的实验,并编写相应的代码,需要一些时间才能直观地掌握这种关系。祝你好运! - esilver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接