CoreImage 中的模糊滤镜

Posted claireyuancy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CoreImage 中的模糊滤镜相关的知识,希望对你有一定的参考价值。

1.CoreImage 中的模糊滤镜

1.1CoreImage是苹果用来简化图片处理的框架

1.2CIImage、CIFilter与CIContext三者联系

1.3CIGaussianBlur中可能设置的參数

2.UIImage+imageEffects的category模糊效果

3.ios8中的UIVisualEffectView模糊效果的使用方法


一、.CoreImage 中的模糊滤镜

- (void)coreImageBlur

{

    //原始图片

    UIImage *image          = [UIImage imageNamed:@"CoreImage"];

    

    //CoreImage部分--------------------

    //CIImage

    CIImage *ciImage        = [[CIImage alloc]initWithImage:image];

    

    //CIFilter

    CIFilter*blurFilter     = [CIFilter filterWithName:@"CIGaussianBlur"];

    

    //将图片输入到滤镜中

    [blurFilter setValue:ciImage forKey:kCIInputImageKey];

    //设置模糊程序

    [blurFilter setValue:@(1) forKey:@"inputRadius"];

    //用业查询滤镜能够设置的參数以及一引起相关的信息

    NSLog(@"%@",[blurFilter attributes]);

    

    //将处理好的图片输出

    CIImage *outCiImage     = [blurFilter valueForKey:kCIOutputImageKey];

    

    //CIContext

    CIContext *context      = [CIContext contextWithOptions:nil];

    //获取CGImage句柄

    CGImageRef outCGImage   = [context createCGImage:outCiImage

                                            fromRect:[outCiImage extent]];

    //终于获取到图片

    UIImage *blurImage      = [UIImage imageWithCGImage:outCGImage];

    //释放CGImage句柄

    CGImageRelease(outCGImage);

    //---------------------------------

    //

    //初始化UIImageView

    UIImageView *imageView = \

    [[UIImageView alloc]initWithFrame:CGRectMake(00590/2.0988/2.0)];

    imageView.image         =  blurImage;

    imageView.center        = self.view.center;

    [self.view addSubview:imageView];

}


二、UIImage+ImageEffects的category 模糊效果

1.UIImage+ImageEffects是Accelerate框架中的内容

2.UIImage+ImageEffects的模糊效果很美观

3.改动过的UIImage+ImageEffects能够对图片进行局模糊

#import "UIImage+ImageEffects.h"

- (void)effectiveImages

{

    UIImage *sourceImage = [UIImage imageNamed:@"normal"];

    CGSize  imageSize    = sourceImage.size;

    UIImage *blurImage   = [sourceImage blurImageAtFrame:CGRectMake(00, imageSize.width/2, imageSize.height )];

    UIImageView *imageView = [[UIImageView alloc]initWithImage:blurImage];

    imageView.center        = self.view.center;

    [self.view addSubview:imageView];

}

UIImage+ImageEffects 下载地址:http://download.csdn.net/detail/baitxaps/8893093


三、iOS8 中 UIVisualEffectView 模糊效果的使用
1.UIVisualEffectView的模糊效果是即时渲染的
2.要注意处理在UIVisualEffectiView之上的文本显示
3.仅仅能在iOS8以上才可以使用UIVisualEffectiView

- (void)visualEffectImage

{

    UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:self.view.bounds];

    UIImageView *imageView      = [[UIImageView alloc]initWithImage:[UIImageimageNamed:@"normal"]];

    scrollView.contentSize      = imageView.image.size;

    scrollView.bounces           = NO;

    [scrollView addSubview:imageView];

    [self.view addSubview:scrollView];

    

    /*加入模糊效果*/

    //1.创建模糊View

    UIVisualEffectView *effectView = [[UIVisualEffectView alloc]initWithEffect:[UIBlurEffecteffectWithStyle:UIBlurEffectStyleLight ]];

    

    //2.设定尺寸

    effectView.frame = CGRectMake(0100320200);

    

    //3.加入到View其中

    [self.view addSubview:effectView];

    

    //4.加入显示文本

    UILabel *label = [[UILabel alloc]initWithFrame:effectView.bounds];

    label.text      = @"hello world";

    label.font      = [UIFont systemFontOfSize:32];

    label.textAlignment = NSTextAlignmentCenter;

   // [effectView.contentView addSubview:label];

    

    //5.

    //加入模糊子ViewUIVisualEffectView

    //1.创建出子模糊View

    UIVisualEffectView *subEffectView = [[UIVisualEffectView alloc]initWithEffect:[UIVibrancyEffect effectForBlurEffect:(UIBlurEffect *)effectView.effect]];

    

    //2.设定尺寸

    subEffectView.frame = effectView.bounds;

    //3.将子模糊View加入到effectivecontentView才干生效

    [effectView.contentView addSubview:subEffectView];

    //4.加入要显示的View来达到特殊的效果

    [subEffectView.contentView addSubview:label];

}

四、设计下载图片后自己主动模糊的控件
1.用KVO监听下载完毕后的事件
2.在子线程中进行渲染。主线程中进行图片的载入

3.新建一个下载类,GCD看前面博客文档GCD的封装

@interface BlurDownloadPicView : UIView

@property (nonatomic,strong)NSString *pictureUrlString;//图片下载地址

@property (nonatomic)       UIViewContentMode contentMode;//图片显示方式


//開始运行

- (void)startProgress;

@end


#import "UIImage+ImageEffects.h"

#import "BlurDownloadPicView.h"

#import "GCD.h"


@interface BlurDownloadPicView()

@property (nonatomic,strong)UIImageView *imageView;

@end


@implementation BlurDownloadPicView


- (instancetype)initWithFrame:(CGRect)frame{

    self = [super initWithFrame:frame];

    if (self) {

        //初始化控件

        //最好放一个方法中

        self.imageView = [[UIImageView alloc]initWithFrame:self.bounds];

        self.imageView.alpha = 0.f;

        [self addSubview:self.imageView];

    }

    return self;

}


- (void)startProgress{

    if (self.pictureUrlString) {

        

        [GCDQueue executeInGlobalQueue:^{

            //创建请求

            NSURLRequest *request = [NSURLRequest requestWithURL:

                                     [NSURL URLWithString:self.pictureUrlString]];

            

            //由于是同步请求。会堵塞主线程

            NSData *data = [NSURLConnection sendSynchronousRequest:request

                                                 returningResponse:nil

                                                             error:nil];

            

            UIImage *image = [[UIImage alloc]initWithData:data];

            //对图片进行模糊。会堵塞主线程

            UIImage *blurImage = [image blurImage];

            

            [GCDQueue executeInMainQueue:^{


                [UIView animateWithDuration:1.0 animations:^{

                    self.imageView.alpha = 1.f;

                }];

                self.imageView.image = blurImage;

            }];

        }];

    }

}


@synthesize contentMode = _contentMode;

- (void)setContentMode:(UIViewContentMode)contentMode{

    _contentMode = contentMode;

    self.imageView.contentMode = contentMode;

}


- (UIViewContentMode)contentMode{

    return _contentMode;

}


@end



4.使用

- (void)viewDidLoad {

    [super viewDidLoad];

   //[self coreImageBlur];

   //[self visualEffectImage];

 

    NSString *picUrlString = @"http://t1.mmonly.cc/uploads/allimg/tuku2/14400BR6-0.jpg";

    BlurDownloadPicView *blurDownLoadView = [[BlurDownloadPicView alloc]initWithFrame:self.view.bounds];

    blurDownLoadView.center               = self.view.center;

    [self.view addSubview:blurDownLoadView];

    blurDownLoadView.pictureUrlString = picUrlString;

    blurDownLoadView.contentMode       = UIViewContentModeScaleAspectFill;

    [blurDownLoadView startProgress];

}





以上是关于CoreImage 中的模糊滤镜的主要内容,如果未能解决你的问题,请参考以下文章

通过CoreImage生成二维码

iOS滤镜功能

iOS开发之滤镜的使用技巧(CoreImage)

iOS滤镜 图片处理

产生黑白效果的最佳 Core Image 滤镜是啥?

背景虚化 高斯模糊