zoukankan      html  css  js  c++  java
  • 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];

    }





  • 相关阅读:
    Excel中的日期时间计算,套路很全
    WPS表格 制作甘特图
    关于海康威视与Unity3d集成冲突问题解决
    海康威视(iOS集成)
    Objective-C
    Android中windowTranslucentStatus与windowTranslucentNavigation的一些设置(转)
    Could not symlink include/node/android-ifaddrs.h
    dyld`__abort_with_payload:
    about the libiconv.2.dylib
    Intent的作用和表现形式简单介绍
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7367491.html
Copyright © 2011-2022 走看看