在涉及到图片的应用中,基本上都会加入图片滤镜的相关功能。
IOS自身也自带了功能强大的滤镜相关的API,具体希望了解的朋友可以查询一下苹果的文档。
今天这里要介绍的是lookup table(颜色查找表),简而言之就是通过将每一个原始的颜色进行转换之后成为一个新的颜色。
打一个比方,比如原始颜色是红色(r:255,g:0,b:0),进行转换后变为绿色(r:0,g:255,b:0),以后所有是红色的地方都会被自动转换为绿色。
而颜色查找表就是将所有的颜色进行一次(矩阵)转换,而很多的滤镜功能就是提供了这么一个转换的矩阵,在原始色彩的基础上进行颜色的转换。
![](https://i-blog.csdnimg.cn/blog_migrate/f817bf2200a04644d15d9d30934982bb.webp?x-image-process=image/format,png)
然而IOS自带的图像处理API中并没有提供颜色查找表相关的内容。即使如此,善解人意的GPUImage的大大们给我们提供了一个相关的接口,今天就来简单的介绍一下用法。
1 图片添加滤镜效果
资源:一张图片(随意),photoshop
a)在photoshop中载入原始图片
![](https://i-blog.csdnimg.cn/blog_migrate/ab2ae4dd1be225a51052c7e861a50a05.webp?x-image-process=image/format,png)
b)调整photoshop中的调整面板,对图像进行调整,并达到满意的效果。
![](https://i-blog.csdnimg.cn/blog_migrate/3e5ba234b884a129bee3707e7cb28e9b.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/69f3e6a64687c7dc6c4f223f0b910171.webp?x-image-process=image/format,png)
c)在达到满意的效果之后,对original lookup table(原始颜色查找表)进行一次相同的调整操作
![](https://i-blog.csdnimg.cn/blog_migrate/03889795b7d58fa1457b1c6de703591b.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/9ee1346653d9dbd2da642e5d01221f9e.webp?x-image-process=image/format,png)
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相关的文件夹内,大家可以找一找。