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 = \
/2.0)];
imageView.image = blurImage;
imageView.center = self.view.center;
[self.view addSubview:imageView];
}
二、UIImage+ImageEffects的category
模糊效果
1.UIImage+ImageEffects是Accelerate框架中的内容
2.UIImage+ImageEffects的模糊效果很美观
#import "UIImage+ImageEffects.h"
- (void)effectiveImages
{
UIImage *sourceImage = [UIImage imageNamed:@"normal"];
CGSize imageSize = sourceImage.size;
, ,
imageSize., imageSize.height )];
UIImageView *imageView = [[UIImageView alloc]initWithImage:blurImage];
imageView.center = self.view.center;
[self.view addSubview:imageView];
}
- (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., , , );
//3.加入到View其中
[self.view addSubview:effectView];
//4.加入显示文本
UILabel *label = [[UILabel alloc]initWithFrame:effectView.bounds];
label.text = @"hello world";
label.];
label.textAlignment = NSTextAlignmentCenter;
// [effectView.contentView addSubview:label];
//5.
//加入模糊子View的UIVisualEffectView
//1.创建出子模糊View
UIVisualEffectView *subEffectView = [[UIVisualEffectView alloc]initWithEffect:[UIVibrancyEffect effectForBlurEffect:(UIBlurEffect *)effectView.effect]];
//2.设定尺寸
subEffectView.frame = effectView.bounds;
//3.将子模糊View加入到effective的contentView才干生效
[effectView.contentView addSubview:subEffectView];
//4.加入要显示的View来达到特殊的效果
[subEffectView.contentView addSubview:label];
}
1.用KVO监听下载完毕后的事件
@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
- (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 中的模糊滤镜的更多相关文章
- mysql中的模糊查询
转载自:http://www.letuknowit.com/archives/90/ MySQL中实现模糊查询有2种方式:一是用LIKE/NOT LIKE,二是用REGEXP/NOT REGEXP(或 ...
- Mybatis中的模糊查询
今天下午做的一个功能,要用到模糊查询,字段是description,刚开始我的写法用的是sql中的模糊查询语句, 但是这个有问题,只有将字段的全部值传入其中,才能查询,所以不是迷糊查询. 后来经过搜索 ...
- 最快的3x3中值模糊
10.1国庆后,知名博主:laviewpbt http://www.cnblogs.com/Imageshop/ 发起了一个优化3x3中值模糊的小活动. 俺也参加其中,今天博主laviewpbt ...
- mongo中的模糊查询
以下是一个mongo查询的综合应用,即介绍一个生产中实际应用的模糊查询,当然其实也很简单,主要用到mongo中的模糊查询和$or查询,以及并的关系,下面是一个mongo中的一条记录 { "_ ...
- 解决 canvas 绘图在高清屏中的模糊问题
解决 canvas 绘图在高清屏中的模糊问题 为什么模糊 CSS 像素是一个抽象单位(1 px),浏览器根据某种规则将 css 像素转化为屏幕需要的实际像素值. 在高清屏之前,屏幕上显示一个像素点需要 ...
- MySQL中的模糊查询和通配符转义
MySQL中实现模糊查询有2种方式:一是用LIKE/NOT LIKE,二是用REGEXP/NOT REGEXP(或RLIKE/NOT RLIKE,它们是同义词). 第一种是标准的SQL模式匹配.它有2 ...
- 【Django】Django中的模糊查询以及Q对象的简单使用
Django中的模糊查询: 需要做一个查找的功能,所以需要使用到模糊查询. 使用方法是:字段名加上双下划线跟上contains或者icontains,icontains和contains表示是否区分大 ...
- Flash中如何使用滤镜
使用滤镜 应用或删除滤镜 复制和粘贴滤镜 为对象应用预设滤镜 启用或禁用应用于对象的滤镜 启用或禁用应用于对象的所有滤镜 创建预设滤镜库 对象每添加一个新的滤镜,在属性检查器中,就会将其添加到该对象所 ...
- Emgu-WPF学习使用-中值模糊
原文:Emgu-WPF学习使用-中值模糊 实现效果: 实现途径: 前提:Image File-> System.Drawing.Bitmap->Image<Bgr, byte> ...
随机推荐
- Discuz常见小问题-如何关闭验证码
进入后台,在防灌水,验证设置中可以切换哪些情况下是否使用验证码 如果启用验证码,也客户修改验证码的难度,样式.最后点击提交,完成之后可以退出到前台,测试是否能够不用验证码自动登录
- javascript基于原型的语言的特点
一.基于原型的语言的特点 1 只有对象,没有类;对象继承对象,而不是类继承类. 2 “原型对象”是基于原型语言的核心概念.原型对象是新对象的模板,它将自身的属性共享给新对象.一个对象不但可以享有自己 ...
- PHP传值与传址(引用)
传值和传引用的区别在于,如果一个参数比较大,占用大量的内存空间,那么传引用的话就会节省拷贝空间. 传值:是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值 传引用 :真正的以地址的方式传递参 ...
- JQuery 之 动态加载JS或JS文件
如果用jquery的append直接加载script标签的话,会报错的. 1.可以用 document.write() 实现加载动态JS代码. 2.可以用 getScript() 函数实现加载JS文件 ...
- 转:nginx基础概念(connection)
在nginx中connection就是对tcp连接的封装,其中包括连接的socket,读事件,写事件.利用nginx封装的connection,我们可以很方便的使用nginx来处理与连接相关的事情,比 ...
- Linux使用笔记
1:Ubuntu系统获取超级权限: 在终端输入:sudo passwd,重置uinx密码.然后输入 su ,输入密码,即可进入root权限. 2:更改文件属性 Linux文件的基本权限有九个,分别是o ...
- openerp 7.0邮件接收中文附件乱码问题解决办法
openerp 7.0邮件接收中文附件乱码问题解决办法: 修改文件\addons\mail\mail_thread.py #1064 line插入代码: h=email.Header.Header(n ...
- 包管理和环境管理软件Anaconda
可以用于配置linux下得虚拟环境,该软件可以针对不同服务配置不同的运行环境,方便包管理与环境管理
- Echarts学习记录——如何给x轴文字标签添加事件
Echarts学习记录——如何给x轴文字标签添加事件 关键属性 axisLabel下属性clickable:true 并给图表添加单击事件 根据返回值判断点击的是哪里 感觉自己的方法有点变扭,有更好办 ...
- Kinect2.0获取关节姿态(Joint Orientation)
Bones Hierarchy 骨骼层次结构从SpineBase作为根节点开始,一直延伸到肢体末端(头.指尖.脚): 层级结构如下图所示: 通过IBody::GetJointOrientations函 ...