如何使用OpenGL ES对UIImage应用扭曲?

Meh*_*tri 4 iphone opengl-es core-graphics objective-c ios

有没有办法在iPhone应用程序PhotoTwist中使用OpenGL ES在UIImage上创建像凹痕,捏,扭曲,挤压等效果

这样做是否有任何参考或指导?我不想要代码,只是如何做到这一点的参考.

Bra*_*son 15

执行此类图像处理的最高效方法是使用OpenGL ES 2.0着色器.再一次,如果我可以指向您的GPUImage框架,它可以执行您描述的许多失真操作.对于那些缺失的,您可以编写自己的片段着色器.

我在那里的效果是凸起的凸起失真(使用GPUImageBulgeDistortionFilter):

凸出失真

凹陷失真(使用前一个滤波器的反转比例参数):

凹面失真

漩涡扭曲(使用GPUImageSwirlFilter):

旋流失真

最后,捏缩乱(使用GPUImagePinchDistortionFilter):

捏变形

如果您查看用于每个过滤器的着色器,您会发现它们之间的数学非常相似.您应该能够调整它以从同一个基础生成您自己的自定义效果.

将这些过滤器应用于UIImages相当容易.如果您只想使用一个过滤器,则可以执行以下操作:

UIImage *inputImage = [UIImage imageNamed:@"test.jpg"];
GPUImageBulgeDistortionFilter *stillImageFilter = [[GPUImageBulgeDistortionFilter alloc] init];
UIImage *quickFilteredImage = [stillImageFilter imageByFilteringImage:inputImage];
Run Code Online (Sandbox Code Playgroud)

这将从磁盘创建UIImage,使用OpenGL ES过滤它,并返回一个过滤的UIImage供您使用.如果您想要执行更高级的链式效果,可以使用GPUImagePicture和自定义过滤器管道,或者可以使用其他输入源过滤实时摄像机视频或电影.

此项目的源代码可在BSD许可证的上述链接中获得,因此您可以深入了解如何与OpenGL ES之间传输数据以及如何执行这些类型的过滤器.