如何使用OpenGL ES将变形应用于UIImage?

有什么办法像在iPhone应用程序PhotoTwist中一样使用OpenGL ES在UIImage上创build像凹痕,捏,扭曲,压扁等效果 ?

有没有这样的参考或指导方针? 我不想要代码,只是参考如何做到这一点。

进行这种image processing的最高性能方法是使用OpenGL ES 2.0着色器。 再一次,如果我可能将您指向我的GPUImage框架,它可以执行许多您描述的失真操作。 对于那些缺less的,你可以写你自己的片段着色器。

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

凸出变形

一个凹形失真(对前一个滤波器使用倒置的缩放参数):

凹陷失真

旋转失真(使用GPUImageSwirlFilter):

旋流失真

最后,一个捏失真(使用GPUImagePinchDistortionFilter):

捏失真

如果你看看用于每个filter的着色器,你会发现它们之间的math非常相似。 你应该能够调整,以从这个相同的基地产生自己的自定义效果。

将这些filter应用于UIImage是相当容易的。 如果您只想使用一个filter,则可以执行以下操作:

UIImage *inputImage = [UIImage imageNamed:@"test.jpg"]; GPUImageBulgeDistortionFilter *stillImageFilter = [[GPUImageBulgeDistortionFilter alloc] init]; UIImage *quickFilteredImage = [stillImageFilter imageByFilteringImage:inputImage]; 

这将从磁盘创build一个UIImage,使用OpenGL ES进行过滤,并返回一个过滤的UIImage供您使用。 如果您想要执行更高级的链接效果,则可以使用GPUImagePicture和自定义滤镜pipe道,或者可以使用不同的input源来过滤实时相机video或电影。

这个项目的源代码可以在BSD许可证的上面的链接中find,所以你可以深入了解如何在OpenGL ES之间传输数据,以及如何执行这些types的filter。

来自Apple Developer Connection的照片编辑扩展示例代码可以做到这一点。