简单创建CIFilter 没有专业处理, 仅能达到简单的模糊效果,效果如图
(1)原图
(2)旧色调处理效果
(3)模糊处理
简单的代码结果如下
//
// ViewController.m
// 滤镜
// 本文查看博客地址http://blog.youkuaiyun.com/u010670117
// Created by yangxiuying on 15/1/21.
// Copyright (c) 2015年 lanjiying. All rights reserved.
//
#import "ViewController.h"
typedef enum
{
///旧色调
SepiaTone =0,
///模糊设置
GaussianBlur,
}Stype;
@interface ViewController ()
@property(nonatomic,retain)UISlider * slider;
@property(nonatomic,retain)UISegmentedControl * segmentControl;
@property(nonatomic,assign)Stype type;
@property(nonatomic,retain)UIImageView * imgView;
@property(nonatomic,retain)UIImage * image;
@property(nonatomic,retain)UIImageView * imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
UILabel * label = [[UILabelalloc]initWithFrame:CGRectMake(20,30,280, 20)];
label.backgroundColor = [UIColorcyanColor];
label.text =@"先选中按钮,再拖动滑块即可达到想要的效果";
label.numberOfLines =0;
label.font = [UIFontsystemFontOfSize:14.0];
[self.viewaddSubview:label];
_slider = [[UISlideralloc]initWithFrame:CGRectMake(50,50,200, 40)];
_slider.maximumValue =1.0;
_slider.minimumValue =0;
_slider.continuous =YES;
[_slideraddTarget:selfaction:@selector(valueChange)forControlEvents:UIControlEventValueChanged];
[self.viewaddSubview:_slider];
_segmentControl = [[UISegmentedControlalloc]initWithFrame:CGRectMake(100,80,120, 40)];
// _segmentControl.segmentedControlStyle = UISegmentedControlStyleBar;
[_segmentControlinsertSegmentWithTitle:@"旧色调"atIndex:0animated:YES];
[_segmentControlinsertSegmentWithTitle:@"模糊设置"atIndex:1animated:YES];
[_segmentControladdTarget:selfaction:@selector(ButtonAction)forControlEvents:UIControlEventValueChanged];
[self.viewaddSubview:_segmentControl];
_image = [UIImageimageNamed:@"朝霞.jpg"];
_imageView = [[UIImageViewalloc]initWithFrame:CGRectMake(50,150,_image.size.width,_image.size.height)];
[_imageView setImage:_image];
[self.viewaddSubview:_imageView];
}
-(void)ButtonAction
{
switch (_segmentControl.selectedSegmentIndex) {
case0:
{
self.type =SepiaTone;//旧色调
}
break;
default:
{
self.type =GaussianBlur;//模糊设置
}
break;
}
}
-(void)valueChange
{
switch (self.type) {
caseSepiaTone:
{
//旧色调
[selffilterSepiaTone];
}
break;
default:
{
//模糊设置
[selffilterGaussianBlur];
}
break;
}
}
//旧色调处理
-(void)filterSepiaTone
{
//创建CIContext对象(默认值,传入nil)
CIContext * context = [CIContextcontextWithOptions:nil];
//获取图片
CIImage * cimage = [CIImageimageWithCGImage:[_imageCGImage]];
//创建CIFilter
CIFilter * sepiaTone = [CIFilterfilterWithName:@"CISepiaTone"];
//设置滤镜输入参数
[sepiaTonesetValue:cimageforKey:@"inputImage"];
//获取滑块的Value,设置色调强度
[sepiaTone setValue:[NSNumbernumberWithFloat:[_slidervalue]]forKey:@"inputIntensity"];
//创建处理后的图片
CIImage * resultImage = [sepiaTonevalueForKey:@"outputImage"];
CGImageRef imageRef = [contextcreateCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)];
UIImage * image = [[UIImagealloc]initWithCGImage:imageRef];
[_imageViewsetImage:image];
CFRelease(imageRef);
}
//模糊设置处理
-(void)filterGaussianBlur
{
//创建CIContext对象
CIContext * context = [CIContextcontextWithOptions:nil];
//获取图片
CIImage * image = [CIImageimageWithCGImage:[_imageCGImage]];
//创建CIFilter
CIFilter * gaussianBlur = [CIFilterfilterWithName:@"CIGaussianBlur"];
//设置滤镜输入参数
[gaussianBlursetValue:imageforKey:@"inputImage"];
//设置模糊参数
[gaussianBlursetValue:[NSNumbernumberWithFloat:_slider.value*10]forKey:@"inputRadius"];
//得到处理后的图片
CIImage* resultImage = [gaussianBlurvalueForKey:@"outputImage"];
CGImageRef imageRef = [contextcreateCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)];
UIImage * imge = [[UIImagealloc]initWithCGImage:imageRef];
[_imageView setImage:imge];
CFRelease(imageRef);
}
@end