在涉及到图片的应用中,基本上都会加入图片滤镜的相关功能。
IOS自身也自带了功能强大的滤镜相关的API,具体希望了解的朋友可以查询一下苹果的文档。
Original Lookup Table今天这里要介绍的是lookup table(颜色查找表),简而言之就是通过将每一个原始的颜色进行转换之后成为一个新的颜色。
打一个比方,比如原始颜色是红色(r:255,g:0,b:0),进行转换后变为绿色(r:0,g:255,b:0),以后所有是红色的地方都会被自动转换为绿色。
而颜色查找表就是将所有的颜色进行一次(矩阵)转换,而很多的滤镜功能就是提供了这么一个转换的矩阵,在原始色彩的基础上进行颜色的转换。
然而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相关的文件夹内,大家可以找一找。
网友评论
但是除此之外,还要实现调整(GPUImage的exposeFilter等)效果,然后通过pipeline把这些调整效果做成filter chain。
现在问题是我没有办法把LUT也加到这个chain中,因此滤镜跟调整功能变得相互独立。
想请教如何能把LUTFilter跟exposeFilter等混合使用并能实时修改相关数值,就像Instagram那样。
期待答复。
original lookup table 是在哪里得到的?
如果你想具体了解的话,你可以看看图像处理方面的书籍,网上应该也有介绍的,反正就是RGB颜色的矩阵变换。