objective-c - 如何在应用程序中应用晕影和复古图像滤镜

标签 objective-c iphone swift image-processing uiimage

我想在我的图像上应用晕影和复古图像滤镜。

我关注了this sample code .

我已经集成了黑白和棕褐色滤镜。此代码还提供了晕影图像滤镜,但它处理速度非常慢,并且在应用此滤镜时应用程序会因一些小图像而崩溃。

请建议我如何实现小插图和复古图像过滤器。 任何建议将不胜感激。 提前致谢!

最佳答案

您可以使用 GPUImage 轻松做到这一点及其 GPUImageSepiaFilter 和 GPUImageVignetteFilter:

Sepia and vignette filtered image

上面的图片是用下面的代码生成的:

UIImage *inputImage = [UIImage imageNamed:@"Lambeau.jpg"];

GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage];
GPUImageSepiaFilter *stillImageFilter = [[GPUImageSepiaFilter alloc] init];
GPUImageVignetteFilter *vignetteImageFilter = [[GPUImageVignetteFilter alloc] init];
vignetteImageFilter.vignetteEnd = 0.6;
vignetteImageFilter.vignetteStart = 0.4;

[stillImageSource addTarget:stillImageFilter];
[stillImageFilter addTarget:vignetteImageFilter];
[stillImageSource processImage];

UIImage *filteredImage = [vignetteImageFilter imageFromCurrentlyProcessedOutput];

还有一个 GPUImageGrayscaleFilter,如果你想对源图像应用灰度滤镜。

正如框架名称所示,这都是 GPU 加速的,因此它比任何受 CPU 限制的图像处理例程都要快得多。事实上,您可以将上述过滤器应用于实时视频。对于 640x480 视频帧,iPhone 4 可以在约 2 毫秒内运行此过滤器。由于往返 UIImages 时需要通过 Core Graphics 进行往返,因此静态图像稍微慢一些,但这仍然比 CPU 绑定(bind)过滤器快 6 倍。

当前实现的一个警告是非 A5 设备(iPhone 3G S、iPhone 4、iPad 1)的纹理大小限制为 2048x2048,因此我目前无法过滤大于此尺寸的图像。我正在研究克服此限制的方法,但与此同时,您可能需要在处理之前缩小图像以适应此分辨率限制。

关于objective-c - 如何在应用程序中应用晕影和复古图像滤镜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9158629/

相关文章:

ios - 我正在尝试使用 Firebase 创建排行榜并显示用户名、高分、地区。

objective-c - View Controller 两次调用 awakeFromNib

iphone - 当我尝试调用 dismissViewController 时应用程序崩溃

objective-c - 在沙盒中从 objective-c /swift 重置 Finder

iphone - 在 iphone 中播放 youtube 视频的问题

ios - 如何将导航 Controller 添加到不是主视图的 View ?

ios - Swift - 关闭搜索 Controller

iphone - UISearch 不显示结果

objective-c - UIWebView,输入密码

ios - iOS 应用程序中的 C 样式字符串被损坏