如何使用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的照片编辑扩展示例代码可以做到这一点。