coreImage框架的簡單使用

最近對圖像處理方面的東西比較感興趣,剛好看了CoreImage這個強大的圖像處理框架潦匈,下面就跟大家分享一下粘勒。

首先,先了解一下CoreImage這個框架以及其中常用的幾個類:

CoreImage是IOS5中新加入的一個Objective-c的框架钩蚊,里面提供了強大高效的圖像處理功能,用來對基于像素的圖像進行操作與分析蹈矮。IOS提供了很多強大的濾鏡(Filter)砰逻,這些Filter提供了各種各樣的效果,并且還可以通過濾鏡鏈將各種效果的Filter疊加起來泛鸟,形成強大的自定義效果蝠咆,如果你對該效果不滿意,還可以子類化濾鏡北滥。

· CIImage

是保存圖像數(shù)據(jù)的類刚操,它有四種比較常用的初始化方式:

1.imageWithCGImage: 
2.imageWithContentsOfURL:
3.imageWithCVImageBuffer:
4.imageWithData:

也可以通過圖像數(shù)據(jù)類比如UIImage,CGImageRef等等初始化再芋。

· CIFilter

濾鏡類菊霜,這個框架中對圖片屬性進行細節(jié)處理的類。濾鏡使用鍵-值來設(shè)置輸入值济赎,一旦這些值設(shè)置好鉴逞,CIFilter就可以用來生成新的CIImage輸出圖像了记某。它的初始化一般用:

CIFilter * filter = [CIFilter filterWithName:@"CIGaussianBlur"];           
下面是查詢需要的濾鏡種類的方法:

1.查詢 效果分類中 包含什么效果:filterNamesInCategory:
(1)按住command 點擊CIFilter 進入接口文件 找到第128行-148行全部都是 效果分類
(2)選擇其中某一個分類 NSLog -> [CIFilter filterNamesInCategory:剛才拷貝的分類]; -> 打印出來的 是這個分類包含的所有 效果 -> 拷貝選擇其中的某一個效果.
2.查詢 使用的效果中 可以設(shè)置什么屬性(KVC) attributes
NSLog -> [CIFilter filterWithName:剛才拷貝選擇其中的某一個效果].attributes ->得到這個濾鏡所有可以設(shè)置的屬性
調(diào)用[CIFilter attributes]會返回filter詳細信息,

·CIContext

CIContext又稱上下文用來渲染CIImage构捡,將作用在CIImage上的濾鏡鏈應(yīng)用到原始的圖片數(shù)據(jù)中液南。

利用下面的語句得到處理后的圖片

    CIImage * resultImage = [sepiaTone valueForKey:@"outputImage"];
    CGImageRef imageRef = [context createCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)];
    UIImage * image = [UIImage imageWithCGImage:imageRef];

現(xiàn)在我們大概了解過了CoreImage以及它的幾個常用類的概念。

現(xiàn)在實戰(zhàn)開始:

具體步驟:
1勾徽、導(dǎo)入CoreImage框架
2滑凉、創(chuàng)建CIImage對象
3、創(chuàng)建CIFilter
4捂蕴、利用鍵值對設(shè)置CIFilter的各種屬性
5譬涡、獲得處理后的圖片
6、將得到的圖片渲染到視圖上

#import "ViewController.h"
#import <CoreImage/CoreImage.h>
//枚舉選擇是改變圖片的色調(diào)還是模糊度
typedef NS_ENUM(int,Stype) {
    ///舊色調(diào)
    SepiaTone =0,
    
    ///模糊設(shè)置
    GaussianBlur,
};

@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 {
    [super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeNone;
    
    _image = [UIImage imageNamed:@"1.jpg"];
    _imageView = [[UIImageView alloc]initWithFrame:self.view.frame];
    _imageView.userInteractionEnabled = YES;
    [_imageView setImage:_image];
    [self.view addSubview:_imageView];

    UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(50,10,280,30)];
    label.text =@"先選中按鈕啥辨,再拖動滑塊即可達到想要的效果";
    label.font = [UIFont systemFontOfSize:14.0];
    [_imageView addSubview:label];
    _slider = [[UISlider alloc]initWithFrame:CGRectMake(50,50,200,40)];
    _slider.maximumValue =1.0;
    _slider.minimumValue =0;
    _slider.continuous =YES;
    [_slider addTarget:self action:@selector(valueChange)forControlEvents:UIControlEventValueChanged];
    [_imageView addSubview:_slider];
    
    _segmentControl = [[UISegmentedControl alloc]initWithFrame:CGRectMake(100,80,120,40)];
    [_segmentControl insertSegmentWithTitle:@"舊色調(diào)"atIndex:0 animated:YES];
    [_segmentControl insertSegmentWithTitle:@"模糊設(shè)置"atIndex:1 animated:YES];
    [_segmentControl addTarget:self action:@selector(ButtonAction)forControlEvents:UIControlEventValueChanged];
    self.navigationItem.titleView = _segmentControl;
 
   }

-(void)ButtonAction
{
    switch (_segmentControl.selectedSegmentIndex) {
        case 0:
        {
            self.type =SepiaTone;//舊色調(diào)
        }
            break;
            
        default:
        {
            self.type =GaussianBlur;//模糊設(shè)置
        }
            break;
    }
}
-(void)valueChange
{
    switch (self.type) {
        case SepiaTone:
        {
            //舊色調(diào)
            [self filterSepiaTone];
        }
            break;
            
        default:
        {
            //模糊設(shè)置
            [self filterGaussianBlur];
        }
            break;
    }
}
//舊色調(diào)處理
-(void)filterSepiaTone
{
    //創(chuàng)建CIContext對象(默認值,傳入nil)
    CIContext * context = [CIContext contextWithOptions:nil];
    //獲取圖片
    CIImage *cimage = [CIImage imageWithCGImage:[_image CGImage]];
    //創(chuàng)建CIFilter
    CIFilter * sepiaTone = [CIFilter filterWithName:@"CISepiaTone"];
    //設(shè)置濾鏡輸入?yún)?shù)
    [sepiaTone setValue:cimage forKey:@"inputImage"];
    
    //獲取滑塊的Value盯腌,設(shè)置色調(diào)強度
    [sepiaTone setValue:[NSNumber numberWithFloat:[_slider value]]forKey:@"inputIntensity"];
    //創(chuàng)建處理后的圖片
    CIImage * resultImage = [sepiaTone valueForKey:@"outputImage"];
    CGImageRef imageRef = [context createCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)];
   UIImage * image = [UIImage imageWithCGImage:imageRef];
    [_imageView setImage:image];
    CFRelease(imageRef);
}
//模糊設(shè)置處理
-(void)filterGaussianBlur
{
    
    //創(chuàng)建CIContext對象
    CIContext * context = [CIContext contextWithOptions:nil];
    //獲取圖片
    CIImage * image = [CIImage imageWithCGImage:[_image CGImage]];
    //創(chuàng)建CIFilter
    CIFilter * gaussianBlur = [CIFilter filterWithName:@"CIGaussianBlur"];
    //設(shè)置濾鏡輸入?yún)?shù)
    [gaussianBlur setValue:image forKey:@"inputImage"];
    //設(shè)置模糊參數(shù)
    [gaussianBlur setValue:[NSNumber numberWithFloat:_slider.value*10] forKey:@"inputRadius"];
    
    //得到處理后的圖片
    CIImage* resultImage = [gaussianBlur valueForKey:@"outputImage"];
    CGImageRef imageRef = [context createCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)];
    UIImage * image = [UIImage imageWithCGImage:imageRef];
    [_imageView setImage:imge];
    CFRelease(imageRef);
    
}
@end

設(shè)置模糊度和色調(diào)的方法里面有重復(fù)代碼溉知,有興趣的話可以自己封裝一下,精簡代碼量腕够。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末级乍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子帚湘,更是在濱河造成了極大的恐慌玫荣,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件大诸,死亡現(xiàn)場離奇詭異捅厂,居然都是意外死亡,警方通過查閱死者的電腦和手機资柔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門焙贷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贿堰,你說我怎么就攤上這事辙芍。” “怎么了羹与?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵故硅,是天一觀的道長。 經(jīng)常有香客問我纵搁,道長吃衅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任诡渴,我火速辦了婚禮捐晶,結(jié)果婚禮上菲语,老公的妹妹穿的比我還像新娘。我一直安慰自己惑灵,他們只是感情好山上,可當(dāng)我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著英支,像睡著了一般佩憾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上干花,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天妄帘,我揣著相機與錄音,去河邊找鬼池凄。 笑死抡驼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肿仑。 我是一名探鬼主播致盟,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尤慰!你這毒婦竟也來了馏锡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤伟端,失蹤者是張志新(化名)和其女友劉穎杯道,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體责蝠,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡党巾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了玛歌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昧港。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖支子,靈堂內(nèi)的尸體忽然破棺而出创肥,到底是詐尸還是另有隱情,我是刑警寧澤值朋,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布叹侄,位于F島的核電站,受9級特大地震影響昨登,放射性物質(zhì)發(fā)生泄漏趾代。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一丰辣、第九天 我趴在偏房一處隱蔽的房頂上張望撒强。 院中可真熱鬧禽捆,春花似錦、人聲如沸飘哨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芽隆。三九已至浊服,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胚吁,已是汗流浹背牙躺。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腕扶,地道東北人孽拷。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像半抱,于是被迫代替她去往敵國和親乓搬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容

  • { ??代虾、引導(dǎo)界面 sleep(1.5); self.window = [[UIWindow alloc] init...
    CYC666閱讀 332評論 0 1
  • 一、濾鏡的內(nèi)容和效果是比較多并且復(fù)雜的 激蹲,學(xué)習(xí)濾鏡需要技巧 如下: 兩個輸出語句解決濾鏡的屬性選擇問題: 1.查詢...
    IOS_龍閱讀 5,692評論 4 19
  • 在iOS應(yīng)用中棉磨,有一類應(yīng)用很受廣大妹紙們的青睞,那就是美圖類應(yīng)用学辱。大家都喜歡在自拍后給照片加一個濾鏡效果乘瓤,讓照片看...
    青城書生閱讀 2,523評論 2 5
  • CoreImage是iOS5中新加入的Objective-C的框架,提供了強大高效的圖像處理功能策泣,用來對基于像素的...
    夢月落花LOVE閱讀 688評論 0 5
  • --繪圖與濾鏡全面解析 概述 在iOS中可以很容易的開發(fā)出絢麗的界面效果衙傀,一方面得益于成功系統(tǒng)的設(shè)計,另一方面得益...
    韓七夏閱讀 2,717評論 2 10