iOS 图片背景模糊效果
iOS 图片背景模糊效果
1.使用CoreImage中的模糊滤镜
原始效果图如下:
CoreImage的实现:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIImage * image = [UIImage imageNamed:@"icon"];
/*..CoreImage中的模糊效果滤镜..*/
//CIImage,相当于UIImage,作用为获取图片资源
CIImage * ciImage = [[CIImage alloc]initWithImage:image
];
//CIFilter,高斯模糊滤镜
CIFilter * blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
//将图片输入到滤镜中
[blurFilter setValue:ciImage forKey:kCIInputImageKey];
//用来查询滤镜可以设置的参数以及一些相关的信息
NSLog(@"%@",[blurFilter attributes]);
//设置模糊程度,默认为10,取值范围(0-100)
[blurFilter setValue:@(20) forKey:@"inputRadius"];
//将处理好的图片输出
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 * imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
imageView.image = blurImage;
[self.view addSubview:imageView];
}
[blurFilter attributes]打印结果如下:
//参数以及一些相关的信息,如果不做任何的设置,默认程度为10( CIAttributeDefault = 10);
{
"CIAttributeFilterAvailable_Mac" = "10.4";
"CIAttributeFilterAvailable_iOS" = 6;
CIAttributeFilterCategories = (
CICategoryBlur,
CICategoryStillImage,
CICategoryVideo,
CICategoryBuiltIn
);
CIAttributeFilterDisplayName = "Gaussian Blur";
CIAttributeFilterName = CIGaussianBlur;
CIAttributeReferenceDocumentation = "http://developer.apple.com/cgi-bin/apple_ref.cgi?apple_ref=//apple_ref/doc/filter/ci/CIGaussianBlur";
inputImage = {
CIAttributeClass = CIImage;
CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image.";
CIAttributeDisplayName = Image;
CIAttributeType = CIAttributeTypeImage;
};
inputRadius = {
CIAttributeClass = NSNumber;
CIAttributeDefault = 10;
CIAttributeDescription = "The radius determines how many pixels are used to create the blur. The larger the radius, the blurrier the result.";
CIAttributeDisplayName = Radius;
CIAttributeIdentity = 0;
CIAttributeMin = 0;
CIAttributeSliderMax = 100;
CIAttributeSliderMin = 0;
CIAttributeType = CIAttributeTypeScalar;
};
}
默认程度为10效果图如下:
默认程度为50效果图如下:
2.使用UIImage+ImageEffects
到该地址下载:https://github.com/YouXianMing/UIImageBlur,里面还有很多好东西,值得关注;
导入UIImage+ImageEffects文件到工程中即可使用;
UIImage+ImageEffects的实现:
UIImage * image = [UIImage imageNamed:@"icon"];
//模糊效果渲染耗费时间,建议在子线程中渲染
//对图片进行模糊
UIImage * blurImage = [image blurImage];
//设置模糊度
UIImage * blurImage1 = [image blurImageWithRadius:10];
//设置局部模糊度
UIImage * blurImage2 = [image blurImageAtFrame:CGRectMake(0, 0, image.size.width, image.size.height/2)];
//灰度效果
UIImage * blurImage3 = [image grayScale];
/*其他的一些方法,可以自己尝试使用
//固定宽度与固定高度
- (UIImage *)scaleWithFixedWidth:(CGFloat)width;
- (UIImage *)scaleWithFixedHeight:(CGFloat)height;
//平均的颜色
- (UIColor *)averageColor;
//裁剪图片的一部分
- (UIImage *)croppedImageAtFrame:(CGRect)frame;
*/
UIImageView * imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
imageView.image = blurImage;
[self.view addSubview:imageView];
效果图分别如下:
//局部模糊
//灰色
3.使用UIVisualEffectView
注意:UIVisualEffectView只适用用户iOS 8或以上,才可以使用8以下则不能使用;
UIVisualEffectView的实现:
1.直接将文本内容加在effectView(该情况下的文本内容不能与背景相符应);
UIImage * image = [UIImage imageNamed:@"icon"];
UIImageView * imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
imageView.image = image;
[self.view addSubview:imageView];
UIBlurEffect * blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
//创建模糊view
UIVisualEffectView * effectView = [[UIVisualEffectView alloc]initWithEffect:blur];
effectView.frame = CGRectMake(0, 250, imageView.frame.size.width, 200);
[imageView addSubview:effectView];
//添加显示文本
UILabel * lable = [[UILabel alloc]initWithFrame:effectView.bounds];
lable.text = @"哈哈哈哈哈";
lable.textAlignment = NSTextAlignmentCenter;
lable.font = [UIFont systemFontOfSize:24];
[effectView.contentView addSubview:lable];
效果图如下:
2.加在effectView的子view中使文本与背景相符应;
UIImage * image = [UIImage imageNamed:@"icon"];
UIImageView * imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
imageView.image = image;
[self.view addSubview:imageView];
UIBlurEffect * blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
//创建模糊view
UIVisualEffectView * effectView = [[UIVisualEffectView alloc]initWithEffect:blur];
effectView.frame = CGRectMake(0, 250, imageView.frame.size.width, 200);
[imageView addSubview:effectView];
//添加显示文本
UILabel * lable = [[UILabel alloc]initWithFrame:effectView.bounds];
lable.text = @"哈哈哈哈哈";
lable.textAlignment = NSTextAlignmentCenter;
lable.font = [UIFont systemFontOfSize:24];
//创建模糊子view的UIVisualEffectView
//1.创建出子模糊view
UIVisualEffectView * subEffectView = [[UIVisualEffectView alloc]initWithEffect:[UIVibrancyEffect effectForBlurEffect:(UIBlurEffect *)effectView.effect]];
//2.设定尺寸
subEffectView.frame = effectView.bounds;
//3.将子模糊view添加到effectView的contentView才能够生效
[effectView.contentView addSubview:subEffectView];
//4.添加要显示的view来达到特殊的效果
[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的里面内容:
#import <UIKit/UIKit.h>
@interface BlurDownloadPicView : UIView
//图片下载地址
@property (nonatomic, strong)NSString * picUrl;
//图片显示的方式
@property (nonatomic)UIViewContentMode contentMode;
//开始执行
- (void)startProgress;
@end
BlurDownloadPicView.m的里面内容:
#import "BlurDownloadPicView.h"
#import "GCD.h"
#import "UIImage+ImageEffects.h"
@interface BlurDownloadPicView ()
@property (nonatomic, strong)UIImageView * imageView;
@end
@implementation BlurDownloadPicView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self loadSubViews];
}
return self;
}
- (void)loadSubViews
{
self.imageView = [[UIImageView alloc]initWithFrame:self.bounds];
self.imageView.alpha = 0;
[self addSubview:self.imageView];
}
- (void)startProgress
{
if (self.picUrl) {
[GCDQueue executeInGlobalQueue:^{
//创建请求
NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:self.picUrl]];
//因为是同步请求,会阻塞主线程(mainQueue)
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//获取图片
UIImage * image = [[UIImage alloc]initWithData:data];
//对图片进行模糊,会阻塞主线程(mainQueue)
UIImage * blurImage = [image blurImage];
[GCDQueue executeInMainQueue:^{
//加载图片
self.imageView.image = blurImage;
[UIView animateWithDuration:1 animations:^{
self.imageView.alpha = 1;
}];
}];
}];
}
}
//重写set,get方法
-(void)setContentMode:(UIViewContentMode)contentMode
{
self.contentMode = contentMode;
self.imageView.contentMode = contentMode;
}
- (UIViewContentMode)contentMode
{
return self.contentMode;
}
在ViewController.m里面的实现;
引入#import “BlurDownloadPicView.h”头文件
在viewDidLoad里面的代码实现
- (void)viewDidLoad {
[super viewDidLoad];
NSString * picUrl = @"http://i4.download.fd.pchome.net/g1/M00/0D/1C/oYYBAFTEeAmIWRXgAAKhY5iKdP8AACP_QP4y0IAAqF7878.jpg";
BlurDownloadPicView * blurPicView = [[BlurDownloadPicView alloc]initWithFrame:self.view.bounds];
[self.view addSubview:blurPicView];
blurPicView.picUrl = picUrl;
[blurPicView startProgress];
}
效果图如下:
iOS 图片背景模糊效果的更多相关文章
- 大屏iPhone的适配 +iOS 图片尺寸要求
摘自:http://blog.ibireme.com/2014/09/16/adapted_to_iphone6/ 苹果公司官网设计介绍到:Retina显示屏的超高像素密度已超过人眼能分辨的范围.Re ...
- iOS 图片旋转方法
iOS 图片旋转方法 通过 CGImage 或 CIImage 旋转特定角度 UIImage可通过CGImage或CIImage初始化,初始化方法分别为init(cgImage: CGImage, s ...
- iOS 图片的解压缩
一.图片加载的工作流 概括来说,从磁盘中加载一张图片,并将它显示到屏幕上,中间的主要工作流如下: 假设我们使用 +imageWithContentsOfFile: 方法从磁盘中加载一张图片,此时的图片 ...
- Atitit 动态按钮图片背景颜色与文字组合解决方案
Atitit 动态按钮图片背景颜色与文字组合解决方案 转换背景颜色,setFont("cywe_img", fontScale, 50, 5) 设置文字大小与坐标 文字分拆,使用字 ...
- C# 给PDF添加图片背景
C# 给PDF添加图片背景 今天要实现的是给PDF文件添加图片背景这个功能.PDF是近年来最流行的文件之一,无论是办公还是日常生活中都经常会用到,很多时候,PDF文件的背景色都是白色,看多了难免觉得累 ...
- 实现iOS图片等资源文件的热更新化(三):动态的资源文件夹
简介 此文,将尝试动态从某个不确定的文件夹中加载资源文件.文章,会继续完善自定义的 imageNamed 函数,并为下一篇文章铺垫. 这么做的意义 正如我们经常所说的那样,大多数情景知道做事的意义往往 ...
- iOS 图片轮播图(自动滚动)
iOS 图片轮播图(自动滚动) #import "DDViewController.h" #define DDImageCount 5 @interface DDViewContr ...
- jquery mobile上传图片完整例子(包含ios图片横向问题处理和C#后台图片压缩)
上传图片本身是个基本的小功能,但是到了移动端就不那么简单了,相信找到这篇文章的你一定有深深的同感. 本文实例是:在(移动端)页面中点击图片,然后选择文件,然后保存.使用Asp.net 难点一:后台获取 ...
- iOS图片加载到内存中占用内存情况
我的测试结果: 图片占用内存 图片尺寸 .png文件大小 1MB 512*512 316KB 4MB 10 ...
随机推荐
- (转)JVM参数调优八大技巧
这里和大家分享一下JVM参数调优的八条经验,JVM参数调优,这是很头痛的问题,设置的不好,JVM不断执行FullGC,导致整个系统变得很慢,网站停滞时间能达10秒以上,相信通过本文的学习你对JVM参数 ...
- javascript笔记——jqGrid再次封装
xingrunzhao js插件再次封装 demo 'use strict'; /** * commerce grid框架 * 依赖jqgrid */ (function ($_self, jQuer ...
- Mysql数据表的操作
表的操作 前提:选择数据库 语法: use 数据库名; 1.创建数据表 语法: create table 表名( 字段1 字段类型 [附加属性], 字段2 字段类型 [附加属性], 字段3 字段类型 ...
- easyui知识累计.递增.
(001) 偶然发现 easyui 1.4.4 版本以下在使用easyloader时的一个bug(声明:只有在使用easyloader加载模块时有此问题) : (只测试过1.4.2, 1.4.3, 1 ...
- URAL 1024 Permutations(LCM)
题意:已知,可得出 P(1) = 4, P(2) = 1, P(3) = 5,由此可得出 P(P(1)) = P(4) = 2. And P(P(3)) = P(5) = 3,因此.经过k次如上变换, ...
- [android网络有效性检测] NetworkMonitor代码造成内存泄漏
造成内存泄漏的log如下: E StrictMode: A resource was acquired at attached stack trace but never released. See ...
- C#委托的异步调用1
本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: /*添加的命名空间 u ...
- 多线程的单元测试工具 - GroboUtils
写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的.JVM都终止了,在测试线程启动的其他线程自 ...
- phpcms v9 打开网站特别慢 增加数据库缓存方法
SET GLOBAL QUERY_CACHE_SIZE=80000000; 设置好查询缓存的大小就行了.比如设置个20MB.SET GLOBAL QUERY_CACHE_SIZE=20000000; ...
- A3992学习记录
ATmega64+A3992驱动步进电机 //ATmega 64a 电机驱动板程序//编译环境 AVR Studio 4.17/AVR GCC//系统外部时钟16M//作者:虞恺 //日期:2012. ...