iOS中给图片添加滤镜效果

/ 0评 / 0

在现如今亚洲四大神器横行的时代,滤镜开发那是在国内图片类甚至是视频类的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];

lvjing001

这样就做出了一个模糊的效果,是不是炒鸡简单,当然了,这个库还有很多复杂的用法,自己去挖掘吧~

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];

这是一个黑白的滤镜效果,苹果的其他效果用法都差不多~

lvjing002

当然我们也可以封装一下这种用法

//  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];

lvjing003

更多的用法请参考苹果官方文档

评论已关闭。