iOS 模糊效果的使用

1. CoreImage 中的模糊滤镜

  • a. coreImage是苹果用来简化图片处理的框架
  • b. CIImage, CIFilter与CIContext三者之间的联系(CoreImage中三个重要的类)
  • c. CIGaussianBlur(高斯模糊)中可以设置的参数
    高斯模糊效果:


    Simulator Screen Shot 2016年4月7日 下午12.51.48.png

    Simulator Screen Shot 2016年4月7日 下午12.52.23.png
// 原始图片
    UIImage *image           = [UIImage imageNamed:@"12.jpg"];
    
    /*-----------------CoreImage部分--------------------*/
    
    // CIImage
    CIImage *ciImage         = [[CIImage alloc] initWithImage:image];
    
    // CIFilter(滤镜的名字, 不要写错 高斯模糊)
    CIFilter *blurFilter     = [CIFilter filterWithName:@"CIGaussianBlur"];
    
    // 将图片输入到滤镜中
    [blurFilter setValue:ciImage forKey:kCIInputImageKey];
    
    /**在传入图片进入滤镜后,可以更改滤镜的一些参数进行设置,比如模糊程度等*/
    NSLog(@"%@", [blurFilter attributes]); // 打印看一下有哪些参数可以设置及相关信息
    // inputRadius参数: 模糊的程度 默认为10, 范围为0-100, 接收的参数为NSNumber类型
    
    // 设置模糊的程度
    [blurFilter setValue:@(8) forKey:@"inputRadius"];
    
    // 将处理好的图片输出
    CIImage *outImage        = [blurFilter valueForKey:kCIOutputImageKey];
    
    // CIContext 上下文(参数nil->默认为CPU渲染, 如果想用GPU渲染来提高效率的话,则需要传参数)
    CIContext *context       = [CIContext contextWithOptions:nil];
    
    // 将处理好的图片创建出来 outImage原来的大小size
    CGImageRef outputCGImage = [context createCGImage:outImage
                                             fromRect:[outImage extent]];
    
    UIImage *blurImage       = [UIImage imageWithCGImage:outputCGImage];
    
    // 释放CGImageRef
    CGImageRelease(outputCGImage);
    /*-------------------------------------------------*/


    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)];
    imageView.center       = self.view.center;
    imageView.image        = blurImage;
    [self.view addSubview:imageView];

从上面可以看出 Core Image为了做得比较灵活,Filter都是按字符串的名字去创建的,比如高斯模糊滤镜就是“CIGaussianBlur”,这里有一个官方列表可以参看。
除了这里提到的多种Filter之外,Core Image还提供了CIDetector等类,可以支持人脸识别等,在OS X上Core Image也做了更多支持。

2. 基于vImage的UIImage+ImageEffects的category 模糊效果

  • a.UIImage+ImageEffects是Accelerate框架中的内容
  • b.UIImage+ImageEffects的模糊效果非常美观
  • c.修改过的UIImage+ImageEffects可以对图片进行局模糊等非常多的效果

Accelerate这个framework主要是用来做数字信号处理、图像处理相关的向量、矩阵运算的库。我们可以认为我们的图像都是由向量或者矩阵数据构成的,Accelerate里既然提供了高效的数学运算API,自然就能方便我们对图像做各种各样的处理。
基于vImage我们可以根据图像的处理原理直接做模糊效果,或者使用现有的工具。UIImage+ImageEffects是个很好的图像处理库
这里提供一个下载地址(一个老师进行的改进,里面有部分用法说明)

3. GPUImage

第三方图片处理的开源库的下载地址
同样是做高斯模糊,用GPUImage可以这样:

GPUImageGaussianBlurFilter * blurFilter = [[GPUImageGaussianBlurFilter alloc] init];
blurFilter.blurRadiusInPixels = 2.0;
UIImage * image = [UIImage imageNamed:@"xxx"];
UIImage *blurredImage = [blurFilter imageByFilteringImage:image];

4. iOS8 中 UIVisualEffectView 模糊效果

  • UIVisualEffectView的模糊效果是即时渲染的
  • 在UIVisualEffectView上面添加文本显示要做一些特殊的处理
  • 只有在iOS8以上才可以使用
    代码如下:
// 原始图片
    UIImage *image = [UIImage imageNamed:@"12.jpg"];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)];
    imageView.userInteractionEnabled = YES;
    imageView.center       = self.view.center;
    imageView.image        = image;
    [self.view addSubview:imageView];
    
    // 为了更好的看到UIVisualEffectView的即时渲染效果添加平移手势
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)];
    [imageView addGestureRecognizer:pan];
    
    // 创建模糊View
    UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]];
    
    effectView.frame = CGRectMake(0, 0, 320, 200);
    effectView.center = self.view.center;
    [self.view addSubview:effectView];
    
    
    UILabel *label = [[UILabel alloc] initWithFrame:effectView.bounds];
    label.text = @"东方未明";
    label.textAlignment = NSTextAlignmentCenter;
    label.font = [UIFont systemFontOfSize:30];
//    [effectView.contentView addSubview:label];
    // 在创建的模糊View的上面再添加一个子模糊View
    UIVisualEffectView *subEffectView = [[UIVisualEffectView alloc] initWithEffect:[UIVibrancyEffect effectForBlurEffect:(UIBlurEffect *)effectView.effect]];
    
    subEffectView.frame = effectView.bounds;
    
    [effectView.contentView addSubview:subEffectView];
    
    [subEffectView.contentView addSubview:label];
}

- (void)panGesture:(UIPanGestureRecognizer *)gesture
{
    CGPoint point = [gesture translationInView:gesture.view];
    gesture.view.center = CGPointMake(gesture.view.center.x + point.x,
                                      gesture.view.center.y + point.y);
    [gesture setTranslation:CGPointZero inView:gesture.view];
}

效果:


1.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容