在现如今亚洲四大神器横行的时代,滤镜开发那是在国内图片类甚至是视频类的iOS产品开发当中必不可缺的技能呀。
1.使用GPUImage来做滤镜
GPUImage是一个三方的开源图像处理库,使用 pod 'GPUImage' 然后 #import
UIImage *loadImage=[UIImage imageNamed:@"美女.jpg"];
GPUImageGaussianBlurFilter * blurFilter = [[GPUImageGaussianBlurFilter alloc] init];
blurFilter.blurRadiusInPixels = 2.0;
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, kDiviceSize.width, kDiviceSize.height - 20)];
imageView.image = [blurFilter imageByFilteringImage:loadImage];;
[self.view addSubview:imageView];
这样就做出了一个模糊的效果,是不是炒鸡简单,当然了,这个库还有很多复杂的用法,自己去挖掘吧~
2.使用系统的CoreImage库
苹果这两年也顺应市场潮流,推出了自己的滤镜库~,其实是图像处理库了,功能很多的,就是用起来可能会麻烦点~
UIImage *loadImage=[UIImage imageNamed:@"美女.jpg"]; //获取图片
CIImage *image = [[CIImage alloc] initWithImage:loadImage]; //将图片转换为CIImage
CIFilter *filter = [CIFilter filterWithName:@"CIPhotoEffectMono"]; //根据滤镜名创建滤镜
[filter setValue:image forKey:kCIInputImageKey]; //设置输入图片属性
// [filter setValue:@5.0f forKey:@"inputAngle"];
// [filter setValue:@5.0f forKey:@"inputRadius"];
CIImage *result = [filter valueForKey:kCIOutputImageKey]; //获取输出图片内容
// CIImage *result = [filter outputImage]; //也可以这样写
CIContext *context = [CIContext contextWithOptions:nil]; //获取绘制上下文
CGImageRef outImage = [context createCGImage:result fromRect:[result extent]]; //将输出的内容绘制
UIImage *blurImage = [UIImage imageWithCGImage:outImage]; //获取图片
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, kDiviceSize.width, kDiviceSize.height - 20)];
imageView.image = blurImage;
[self.view addSubview:imageView];
这是一个黑白的滤镜效果,苹果的其他效果用法都差不多~
当然我们也可以封装一下这种用法
// DCFilterEffect.h
#import
#import
@interface DCFilterEffect : NSObject
@property (nonatomic, strong) UIImage *result;
- (instancetype)initWithImage:(UIImage *)image filterName:(NSString *)name;
@end
// DCFilterEffect.m
#import "DCFilterEffect.h"
@interface DCFilterEffect()
@end
@implementation DCFilterEffect
- (instancetype)initWithImage:(UIImage *)image filterName:(NSString *)name{
self = [super init];
if (self){
// 将UIImage转换成CIImage
CIImage *ciImage = [[CIImage alloc] initWithImage:image];
// 创建滤镜
CIFilter *filter = [CIFilter filterWithName:name
keysAndValues:kCIInputImageKey, ciImage, nil];
[filter setDefaults];
// 获取绘制上下文
CIContext *context = [CIContext contextWithOptions:nil];
// 渲染并输出CIImage
CIImage *outputImage = [filter outputImage];
// 创建CGImage句柄
CGImageRef cgImage = [context createCGImage:outputImage
fromRect:[outputImage extent]];
_result = [UIImage imageWithCGImage:cgImage];
// 释放CGImage句柄
CGImageRelease(cgImage);
}
return self;
}
@end
UIImage *loadImage=[UIImage imageNamed:@"美女.jpg"]; //获取图片
DCFilterEffect *DCFilter = [[DCFilterEffect alloc] initWithImage:loadImage filterName:@"CIPhotoEffectInstant"];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, kDiviceSize.width, kDiviceSize.height - 20)];
imageView.image = DCFilter.result;
[self.view addSubview:imageView];
更多的用法请参考苹果官方文档