iOS 图片背景模糊效果

1.使用CoreImage中的模糊滤镜

原始效果图如下:

CoreImage的实现:

  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. // Do any additional setup after loading the view, typically from a nib.
  4. UIImage * image = [UIImage imageNamed:@"icon"];
  5. /*..CoreImage中的模糊效果滤镜..*/
  6. //CIImage,相当于UIImage,作用为获取图片资源
  7. CIImage * ciImage = [[CIImage alloc]initWithImage:image
  8. ];
  9. //CIFilter,高斯模糊滤镜
  10. CIFilter * blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
  11. //将图片输入到滤镜中
  12. [blurFilter setValue:ciImage forKey:kCIInputImageKey];
  13. //用来查询滤镜可以设置的参数以及一些相关的信息
  14. NSLog(@"%@",[blurFilter attributes]);
  15. //设置模糊程度,默认为10,取值范围(0-100)
  16. [blurFilter setValue:@(20) forKey:@"inputRadius"];
  17. //将处理好的图片输出
  18. CIImage * outCiImage = [blurFilter valueForKey:kCIOutputImageKey];
  19. //CIContext
  20. CIContext * context = [CIContext contextWithOptions:nil];
  21. //获取CGImage句柄,也就是从数据流中取出图片
  22. CGImageRef outCGImage = [context createCGImage:outCiImage fromRect:[outCiImage extent]];
  23. //最终获取到图片
  24. UIImage * blurImage = [UIImage imageWithCGImage:outCGImage];
  25. //释放CGImage句柄
  26. CGImageRelease(outCGImage);
  27. UIImageView * imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
  28. imageView.image = blurImage;
  29. [self.view addSubview:imageView];
  30. }
  1. [blurFilter attributes]打印结果如下:
  2. //参数以及一些相关的信息,如果不做任何的设置,默认程度为10( CIAttributeDefault = 10);
  3. {
  4. "CIAttributeFilterAvailable_Mac" = "10.4";
  5. "CIAttributeFilterAvailable_iOS" = 6;
  6. CIAttributeFilterCategories = (
  7. CICategoryBlur,
  8. CICategoryStillImage,
  9. CICategoryVideo,
  10. CICategoryBuiltIn
  11. );
  12. CIAttributeFilterDisplayName = "Gaussian Blur";
  13. CIAttributeFilterName = CIGaussianBlur;
  14. CIAttributeReferenceDocumentation = "http://developer.apple.com/cgi-bin/apple_ref.cgi?apple_ref=//apple_ref/doc/filter/ci/CIGaussianBlur";
  15. inputImage = {
  16. CIAttributeClass = CIImage;
  17. CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image.";
  18. CIAttributeDisplayName = Image;
  19. CIAttributeType = CIAttributeTypeImage;
  20. };
  21. inputRadius = {
  22. CIAttributeClass = NSNumber;
  23. CIAttributeDefault = 10;
  24. CIAttributeDescription = "The radius determines how many pixels are used to create the blur. The larger the radius, the blurrier the result.";
  25. CIAttributeDisplayName = Radius;
  26. CIAttributeIdentity = 0;
  27. CIAttributeMin = 0;
  28. CIAttributeSliderMax = 100;
  29. CIAttributeSliderMin = 0;
  30. CIAttributeType = CIAttributeTypeScalar;
  31. };
  32. }

默认程度为10效果图如下: 
 
默认程度为50效果图如下: 

2.使用UIImage+ImageEffects

到该地址下载:https://github.com/YouXianMing/UIImageBlur,里面还有很多好东西,值得关注; 
导入UIImage+ImageEffects文件到工程中即可使用;

UIImage+ImageEffects的实现:

  1. UIImage * image = [UIImage imageNamed:@"icon"];
  2. //模糊效果渲染耗费时间,建议在子线程中渲染
  3. //对图片进行模糊
  4. UIImage * blurImage = [image blurImage];
  5. //设置模糊度
  6. UIImage * blurImage1 = [image blurImageWithRadius:10];
  7. //设置局部模糊度
  8. UIImage * blurImage2 = [image blurImageAtFrame:CGRectMake(0, 0, image.size.width, image.size.height/2)];
  9. //灰度效果
  10. UIImage * blurImage3 = [image grayScale];
  11. /*其他的一些方法,可以自己尝试使用
  12. //固定宽度与固定高度
  13. - (UIImage *)scaleWithFixedWidth:(CGFloat)width;
  14. - (UIImage *)scaleWithFixedHeight:(CGFloat)height;
  15. //平均的颜色
  16. - (UIColor *)averageColor;
  17. //裁剪图片的一部分
  18. - (UIImage *)croppedImageAtFrame:(CGRect)frame;
  19. */
  20. UIImageView * imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
  21. imageView.image = blurImage;
  22. [self.view addSubview:imageView];

效果图分别如下: 

//局部模糊

//灰色

3.使用UIVisualEffectView

注意:UIVisualEffectView只适用用户iOS 8或以上,才可以使用8以下则不能使用;

UIVisualEffectView的实现:

1.直接将文本内容加在effectView(该情况下的文本内容不能与背景相符应);

  1. UIImage * image = [UIImage imageNamed:@"icon"];
  2. UIImageView * imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
  3. imageView.image = image;
  4. [self.view addSubview:imageView];
  5. UIBlurEffect * blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
  6. //创建模糊view
  7. UIVisualEffectView * effectView = [[UIVisualEffectView alloc]initWithEffect:blur];
  8. effectView.frame = CGRectMake(0, 250, imageView.frame.size.width, 200);
  9. [imageView addSubview:effectView];
  10. //添加显示文本
  11. UILabel * lable = [[UILabel alloc]initWithFrame:effectView.bounds];
  12. lable.text = @"哈哈哈哈哈";
  13. lable.textAlignment = NSTextAlignmentCenter;
  14. lable.font = [UIFont systemFontOfSize:24];
  15. [effectView.contentView addSubview:lable];

效果图如下: 

2.加在effectView的子view中使文本与背景相符应;

  1. UIImage * image = [UIImage imageNamed:@"icon"];
  2. UIImageView * imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
  3. imageView.image = image;
  4. [self.view addSubview:imageView];
  5. UIBlurEffect * blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
  6. //创建模糊view
  7. UIVisualEffectView * effectView = [[UIVisualEffectView alloc]initWithEffect:blur];
  8. effectView.frame = CGRectMake(0, 250, imageView.frame.size.width, 200);
  9. [imageView addSubview:effectView];
  10. //添加显示文本
  11. UILabel * lable = [[UILabel alloc]initWithFrame:effectView.bounds];
  12. lable.text = @"哈哈哈哈哈";
  13. lable.textAlignment = NSTextAlignmentCenter;
  14. lable.font = [UIFont systemFontOfSize:24];
  15. //创建模糊子view的UIVisualEffectView
  16. //1.创建出子模糊view
  17. UIVisualEffectView * subEffectView = [[UIVisualEffectView alloc]initWithEffect:[UIVibrancyEffect effectForBlurEffect:(UIBlurEffect *)effectView.effect]];
  18. //2.设定尺寸
  19. subEffectView.frame = effectView.bounds;
  20. //3.将子模糊view添加到effectView的contentView才能够生效
  21. [effectView.contentView addSubview:subEffectView];
  22. //4.添加要显示的view来达到特殊的效果
  23. [subEffectView.contentView addSubview:lable];

效果图如下: 

4.下载图片后自动模糊效果

在项目中导入UIImage+ImageEffects和GCD文件; 
UIImage+ImageEffects地址:https://github.com/YouXianMing/UIImageBlur
GCD地址:https://github.com/YouXianMing/GCD-Program;

代码的实现:

创建一个UIView的子类,命名为BlurDownloadPicView; 
BlurDownloadPicView.h的里面内容:

  1. #import <UIKit/UIKit.h>
  2. @interface BlurDownloadPicView : UIView
  3. //图片下载地址
  4. @property (nonatomic, strong)NSString * picUrl;
  5. //图片显示的方式
  6. @property (nonatomic)UIViewContentMode contentMode;
  7. //开始执行
  8. - (void)startProgress;
  9. @end

BlurDownloadPicView.m的里面内容:

  1. #import "BlurDownloadPicView.h"
  2. #import "GCD.h"
  3. #import "UIImage+ImageEffects.h"
  4. @interface BlurDownloadPicView ()
  5. @property (nonatomic, strong)UIImageView * imageView;
  6. @end
  7. @implementation BlurDownloadPicView
  8. - (instancetype)initWithFrame:(CGRect)frame
  9. {
  10. self = [super initWithFrame:frame];
  11. if (self) {
  12. [self loadSubViews];
  13. }
  14. return self;
  15. }
  16. - (void)loadSubViews
  17. {
  18. self.imageView = [[UIImageView alloc]initWithFrame:self.bounds];
  19. self.imageView.alpha = 0;
  20. [self addSubview:self.imageView];
  21. }
  22. - (void)startProgress
  23. {
  24. if (self.picUrl) {
  25. [GCDQueue executeInGlobalQueue:^{
  26. //创建请求
  27. NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:self.picUrl]];
  28. //因为是同步请求,会阻塞主线程(mainQueue)
  29. NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
  30. //获取图片
  31. UIImage * image = [[UIImage alloc]initWithData:data];
  32. //对图片进行模糊,会阻塞主线程(mainQueue)
  33. UIImage * blurImage = [image blurImage];
  34. [GCDQueue executeInMainQueue:^{
  35. //加载图片
  36. self.imageView.image = blurImage;
  37. [UIView animateWithDuration:1 animations:^{
  38. self.imageView.alpha = 1;
  39. }];
  40. }];
  41. }];
  42. }
  43. }
  44. //重写set,get方法
  45. -(void)setContentMode:(UIViewContentMode)contentMode
  46. {
  47. self.contentMode = contentMode;
  48. self.imageView.contentMode = contentMode;
  49. }
  50. - (UIViewContentMode)contentMode
  51. {
  52. return self.contentMode;
  53. }

在ViewController.m里面的实现; 
引入#import “BlurDownloadPicView.h”头文件

  1. viewDidLoad里面的代码实现
  2. - (void)viewDidLoad {
  3. [super viewDidLoad];
  4. NSString * picUrl = @"http://i4.download.fd.pchome.net/g1/M00/0D/1C/oYYBAFTEeAmIWRXgAAKhY5iKdP8AACP_QP4y0IAAqF7878.jpg";
  5. BlurDownloadPicView * blurPicView = [[BlurDownloadPicView alloc]initWithFrame:self.view.bounds];
  6. [self.view addSubview:blurPicView];
  7. blurPicView.picUrl = picUrl;
  8. [blurPicView startProgress];
  9. }

效果图如下: 

iOS 图片背景模糊效果的更多相关文章

  1. 大屏iPhone的适配 +iOS 图片尺寸要求

    摘自:http://blog.ibireme.com/2014/09/16/adapted_to_iphone6/ 苹果公司官网设计介绍到:Retina显示屏的超高像素密度已超过人眼能分辨的范围.Re ...

  2. iOS 图片旋转方法

    iOS 图片旋转方法 通过 CGImage 或 CIImage 旋转特定角度 UIImage可通过CGImage或CIImage初始化,初始化方法分别为init(cgImage: CGImage, s ...

  3. iOS 图片的解压缩

    一.图片加载的工作流 概括来说,从磁盘中加载一张图片,并将它显示到屏幕上,中间的主要工作流如下: 假设我们使用 +imageWithContentsOfFile: 方法从磁盘中加载一张图片,此时的图片 ...

  4. Atitit 动态按钮图片背景颜色与文字组合解决方案

    Atitit 动态按钮图片背景颜色与文字组合解决方案 转换背景颜色,setFont("cywe_img", fontScale, 50, 5) 设置文字大小与坐标 文字分拆,使用字 ...

  5. C# 给PDF添加图片背景

    C# 给PDF添加图片背景 今天要实现的是给PDF文件添加图片背景这个功能.PDF是近年来最流行的文件之一,无论是办公还是日常生活中都经常会用到,很多时候,PDF文件的背景色都是白色,看多了难免觉得累 ...

  6. 实现iOS图片等资源文件的热更新化(三):动态的资源文件夹

    简介 此文,将尝试动态从某个不确定的文件夹中加载资源文件.文章,会继续完善自定义的 imageNamed 函数,并为下一篇文章铺垫. 这么做的意义 正如我们经常所说的那样,大多数情景知道做事的意义往往 ...

  7. iOS 图片轮播图(自动滚动)

    iOS 图片轮播图(自动滚动) #import "DDViewController.h" #define DDImageCount 5 @interface DDViewContr ...

  8. jquery mobile上传图片完整例子(包含ios图片横向问题处理和C#后台图片压缩)

    上传图片本身是个基本的小功能,但是到了移动端就不那么简单了,相信找到这篇文章的你一定有深深的同感. 本文实例是:在(移动端)页面中点击图片,然后选择文件,然后保存.使用Asp.net 难点一:后台获取 ...

  9. iOS图片加载到内存中占用内存情况

    我的测试结果: 图片占用内存   图片尺寸           .png文件大小 1MB              512*512          316KB 4MB              10 ...

随机推荐

  1. [zz] 安装PostGIS(Linux篇)

    0.安装PostgreSQL数据库 参考安装PostgreSQL数据库(Linux篇). 1.安装proj4 #tar zxvf proj-4.8.0.tar.gz#cd proj-4.8.0#./c ...

  2. 编程之美 ---> 1.2中国象棋将帅问题

    上图,将帅不能碰面,列出将帅不碰面的所有可能情况,要求:程序只能用一个只有8位的变量(#define这样的就不算了) 为了更加符合程序员的口味,给将帅位置编号如下: 0--1--2 |    |   ...

  3. 【解惑】深入jar包:从jar包中读取资源文件

    [解惑]深入jar包:从jar包中读取资源文件 http://hxraid.iteye.com/blog/483115 TransferData组件的spring配置文件路径:/D:/develop/ ...

  4. 重写session

    <?php ini_set('session.use_only_cookies', 0); $session_id = rand(10000, 99999); session_set_cooki ...

  5. 在linux下配置Nginx+Java+PHP的环境

    Apache对Java的支持很灵活,它们的结合度也很高,例如Apache+Tomcat和Apache+resin等都可以实现对Java应用 的支持.Apache一般采用一个内置模块来和Java应用服务 ...

  6. FFT Golang 实现

    最近项目要用到快速傅立叶变换,自己写了个算法,测试了下,性能和精度还可以接受 len,time= 1048576 378.186167ms diff=-0.00000000000225974794 I ...

  7. 1011. World Cup Betting (20)(最大值)

    With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...

  8. HDFS知识体系 思维导图

  9. 3DSoftRenderer

    研究了好几天基本的图形学,对于光栅化的大致过程有点了解了,很感谢网上的很多大牛的无私奉献,我就写一下这几天的总结,希望也能对网络上的知识做出一点点点的贡献. 屏幕有什么特点,无非是一排排的像素点,每个 ...

  10. iOS:横向使用iPhone默认的翻页效果

    大致思路使用两层辅助UIView的旋转来实现添加后的View的横向翻页效果 CATransform3D transformA = CATransform3DRotate(CATransform3DId ...