在 Objective-C (Swift 3.0 兼容) 中复现 Instagram 风格的滤镜。
这是一个基于 GPUImage 的构建,由 Brad Larson 编写,它是为处理底层 GPU 交互而写的开源框架 IGRFilterCombine。
GPUImage 是一个 BSD 许可的 iOS 库,它允许您将 GPU 加速的滤镜和其他效果应用于图像、实时相机视频和电影。与 Core Image(iOS 5.0 的一部分)相比,GPUImage 允许您编写自己的自定义滤镜,支持部署到 iOS 4.0,并且有一个更简单的接口。然而,它目前缺少 Core Image 的一些更高级的功能,如面部检测。
对于像处理图像或实时视频帧这样的大规模并行操作,与 CPU 相比,GPU 有着一些显著的性能优势。在 iPhone 4 上,一个简单的图像滤镜在 GPU 上执行的速度可以比基于 CPU 的等效滤镜快 100 多倍。
@import IGRFilterCombine;
@interface ViewController ()
@property (nonatomic, strong) IGRFilterCombine *filterCombine;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.filterCombine = [[IGRFilterCombine alloc] initWithDelegate:self];
}
- (void)setupImage:(UIImage *)image
{
__weak typeof(self) weak = self;
[self.filterCombine setImage:image
completion:^(UIImage * _Nullable processedImage, NSUInteger idx) {
//Process Image
}
preview:^(UIImage * _Nullable processedImage, NSUInteger idx) {
//Process Preview
}];
}
- (NSString *)filtereNameAtIndex:(NSUInteger)imageIndex;
- (UIImage *)filteredImageAtIndex:(NSUInteger)imageIndex;
- (UIImage *)filteredPreviewImageAtIndex:(NSUInteger)imageIndex;
- (NSUInteger)count;
#pragma mark - IGRFilterCombineDelegate
- (CGSize)previewSize
{
return CGSizeMake(70.0, 70.0);
}
@end
import IGRFilterCombine
class ViewController: UIViewController {
fileprivate var filterCombine: IGRFilterCombine?
override func viewDidLoad() {
super.viewDidLoad()
filterCombine = IGRFilterCombine(delegate: self as IGRFilterCombineDelegate)
}
func setupWorkImage(_ image: UIImage) {
self.filterCombine?.setImage(image, completion: { (processedImage, idx) in
//Process Image
}) { (processedImage, idx) in
//Process Preview
}
}
self.imageView?.image = image
self.collectionView?.reloadData()
}
// MARK: - IGRFilterCombineDelegate
extension ViewController : IGRFilterCombineDelegate {
func previewSize() -> CGSize {
return CGSize(width: 70.0, height: 70.0)
}
}
open func filtereName(at imageIndex: UInt) -> String
open func filteredImage(at imageIndex: UInt) -> UIImage
open func filteredPreviewImage(at imageIndex: UInt) -> UIImage
open func count() -> UInt
}
查看 /Demo 中的示例 Xcode 项目
IGRFilterCombine
由 IGR Software 和 Vitalii Parovishnyk 所拥有和维护。
IGRFilterCombine
是 MIT 许可。我们还提供了一个额外的专利许可。