美文网首页iOS 图像处理iOS备忘录图片
IOS开发--使用lookup table为图片添加滤镜

IOS开发--使用lookup table为图片添加滤镜

作者: 謝灰灰在找胡蘿蔔 | 来源:发表于2015-07-12 14:36 被阅读3758次

    在涉及到图片的应用中,基本上都会加入图片滤镜的相关功能。

    IOS自身也自带了功能强大的滤镜相关的API,具体希望了解的朋友可以查询一下苹果的文档。

    今天这里要介绍的是lookup table(颜色查找表),简而言之就是通过将每一个原始的颜色进行转换之后成为一个新的颜色。

    打一个比方,比如原始颜色是红色(r:255,g:0,b:0),进行转换后变为绿色(r:0,g:255,b:0),以后所有是红色的地方都会被自动转换为绿色。

    而颜色查找表就是将所有的颜色进行一次(矩阵)转换,而很多的滤镜功能就是提供了这么一个转换的矩阵,在原始色彩的基础上进行颜色的转换。

    Original Lookup Table

    然而IOS自带的图像处理API中并没有提供颜色查找表相关的内容。即使如此,善解人意的GPUImage的大大们给我们提供了一个相关的接口,今天就来简单的介绍一下用法。


    1 图片添加滤镜效果

    资源:一张图片(随意),photoshop

    a)在photoshop中载入原始图片

    原始示例图片

    b)调整photoshop中的调整面板,对图像进行调整,并达到满意的效果。

    在该调整面板对图像进行调整 调整后的图像

    c)在达到满意的效果之后,对original lookup table(原始颜色查找表)进行一次相同的调整操作

    调整前 调整后

    d)将调整后得到的lookup table另存为NewLookupTable.png

    2 代码中引用lookup table

    GPUImage是一个相当出名的第三方图像处理库,这里就不对这个库进行介绍了。

    GPUImage中有一个专门针对lookup table进行处理的滤镜函数GPUImageLookupFilter,使用这个函数就可以直接对图片进行滤镜添加操作了。

    //originalImg是你希望添加滤镜的原始图片

    - (UIImage *)applyFIlter:(UIImage *)originalImg {

    UIImage *inputImage =originalImg;

    UIImage *outputImage = nil;

    GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage];

    //添加滤镜

    GPUImageLookupFilter *lookUpFilter = [[GPUImageLookupFilter alloc] init];

    //导入之前保存的NewLookupTable.png文件

    GPUImagePicture *lookupImg = [[GPUImagePicturealloc] initWithImage:[UIImageimageNamed: @“NewLookupTable.png”]];

    [lookupImg addTarget:lookUpFilteratTextureLocation:1];

    [stillImageSource addTarget:lookUpFilteratTextureLocation:0];

    [lookUpFilter useNextFrameForImageCapture];

    if([lookupImg processImageWithCompletionHandler:nil] && [stillImageSource processImageWithCompletionHandler:nil]) {

    outputImage= [lookUpFilterimageFromCurrentFramebuffer];

    }

    return outputImage;

    }

    就这样滤镜就可以添加成功了,很简单把,哈哈。

    对了哈,GPUImage这个库里面会有一张lookup table的图片的,在GPUImageLookupFilter相关的文件夹内,大家可以找一找。


    顺便安利一下我最近上线的一款app:画意

    《画意》效果图

    相关文章

      网友评论

      • 幻想无极:苹果自己的是CIColorCube
      • 9d461a3948ed:请问lookup table 必须要这样才能作为滤镜吗? 可不可以我在图片上做ps处理,然后把地下原图图层撤掉,换上original lookup table,这样就得到一个新的lookup table,可以吗
      • 金娜娜z:你好~original lookup table从哪里可以获得呢?灰常希望知道?除了8*8的规格,是不是还有4*4的规格?
        9d461a3948ed:@7a3dc5e03943 GPUImage Resource文件夹里有
        helinyu:@7a3dc5e03943 这个lookup table 应该都是我们的ps处理的时候就获取到的吧?!!!
      • ANTI_JAM:你好,我在项目中也使用了LUT来实现滤镜效果。
        但是除此之外,还要实现调整(GPUImage的exposeFilter等)效果,然后通过pipeline把这些调整效果做成filter chain。
        现在问题是我没有办法把LUT也加到这个chain中,因此滤镜跟调整功能变得相互独立。
        想请教如何能把LUTFilter跟exposeFilter等混合使用并能实时修改相关数值,就像Instagram那样。
        期待答复。
        其名为鲲北冥有鱼:@NicoLin 我刚才照这种方法试了一下:标准图放到ps里调色处理后,用gpuimage进行解析处理,然后用同一张图片,同样的调色过程,在ps里做成的效果,和gpuimage里面处理后的效果,竟然不一样,有明显差别,请问是还需要什么处理过程吗?或者是有哪些调色动作,是不被这种方法所支持的吗?
        07ac721d75ad:@NicoLin 请问 lookup table图是如何生成的呢?谢谢......
      • e1b20d838960:请问你是在哪里获取的这方面知识啊
        original lookup table 是在哪里得到的?
        謝灰灰在找胡蘿蔔:@玩玩玩 记不得了,记得以前在哪篇国外的博客里看到过这方面的东西。然后gpuimage里面也有这个函数,所以我把自己的经验写下来啦。

        如果你想具体了解的话,你可以看看图像处理方面的书籍,网上应该也有介绍的,反正就是RGB颜色的矩阵变换。

      本文标题:IOS开发--使用lookup table为图片添加滤镜

      本文链接:https://www.haomeiwen.com/subject/sksuqttx.html