如何在应用程序中应用晕影和复古图像过滤器

Gyp*_*psa 2 iphone image-processing objective-c uiimage swift

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

我按照这个示例代码.

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

请建议我如何实现晕影和复古图像过滤器.任何建议将受到高度赞赏.提前致谢!

Bra*_*son 9

你可以使用GPUImage及其GPUImageSepiaFilter和GPUImageVignetteFilter 相当容易地做到这一点:

棕褐色和小插图过滤图像

上面的图像是使用以下代码生成的:

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];
Run Code Online (Sandbox Code Playgroud)

如果您希望将灰度滤镜应用于源图像,还有一个GPUImageGrayscaleFilter.

正如框架名称所示,这是所有GPU加速的,因此它比任何CPU绑定的图像处理例程快得多.实际上,您可以将上述过滤器应用于实时视频.对于640x480视频帧,iPhone 4可在~2 ms内运行此滤镜.由于往返于UIImages时需要通过Core Graphics的往返行程,静止图像会慢一点,但这仍然比CPU绑定过滤器快6倍.

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