iOS開發(fā)之濾鏡的使用技巧

一扫皱、濾鏡的內(nèi)容和效果是比較多并且復(fù)雜的 ,學(xué)習(xí)濾鏡需要技巧 如下:

兩個(gè)輸出語(yǔ)句解決濾鏡的屬性選擇問題:

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

二析既、了解濾鏡的相關(guān)介紹

介紹

  • 1.框架介紹
    (1)CoreImage
    (2)是一個(gè)圖像框架 它基于OpenGL頂層創(chuàng)建 底層則用著色器來處理圖像
    (3)它利用了GPU基于硬件加速來處理圖像
    (4)CoreImage中有很多濾鏡
    (5)它們能夠一次給予一張圖像或者視頻幀多種視覺效果 -> 濾鏡鏈
    (6)而且濾鏡可以連接起來組成一個(gè)濾鏡鏈 把濾鏡效果疊加起來處理圖像
  • 2.類的介紹
    (1)CIImage:保存圖像數(shù)據(jù)的類 CGImageRef->圖像中的數(shù)據(jù)
    (2).CIFilter:濾鏡類 圖片屬性進(jìn)行細(xì)節(jié)處理的類 它對(duì)所有的像素進(jìn)行操作 用鍵-值(KVC)來設(shè)置
    (3).CIContext:上下文是實(shí)現(xiàn)對(duì)圖像處理的具體對(duì)象 -> 濾鏡對(duì)象輸出的圖像并不是合成之后的圖像 需要使用圖像處理的上下文合并處理的圖像
  • 3.效果介紹
  • 按效果分類:
    kCICategoryDistortionEffect 扭曲效果,比如bump谆奥、旋轉(zhuǎn)眼坏、hole
    kCICategoryGeometryAdjustment 幾何開著調(diào)整,比如仿射變換酸些、平切宰译、透視轉(zhuǎn)換
    kCICategoryCompositeOperation 合并,比如源覆蓋(source over)擂仍、最小化囤屹、源在頂(source atop)、色彩混合模式
    kCICategoryHalftoneEffect Halftone效果逢渔,比如screen、line screen乡括、hatched
    kCICategoryColorAdjustment 色彩調(diào)整肃廓,比如伽馬調(diào)整、白點(diǎn)調(diào)整诲泌、曝光
    kCICategoryColorEffect 色彩效果盲赊,比如色調(diào)調(diào)整、posterize
    kCICategoryTransition 圖像間轉(zhuǎn)換敷扫,比如dissolve哀蘑、disintegrate with mask、swipe
    kCICategoryTileEffect 瓦片效果葵第,比如parallelogram绘迁、triangle
    kCICategoryGenerator 圖像生成器,比如stripes卒密、constant color缀台、checkerboard
    kCICategoryGradient 漸變,比如軸向漸變哮奇、仿射漸變膛腐、高斯?jié)u變
    kCICategoryStylize 風(fēng)格化,比如像素化鼎俘、水晶化
    kCICategorySharpen 銳化哲身、發(fā)光
  • kCICategoryBlur 模糊,比如高斯模糊贸伐、焦點(diǎn)模糊勘天、運(yùn)動(dòng)模糊
  • 按使用場(chǎng)景分類:
    kCICategoryStillImage 用于靜態(tài)圖像
    kCICategoryVideo 用于視頻
    kCICategoryInterlaced 用于交錯(cuò)圖像
    kCICategoryNonSquarePixels 用于非矩形像素
    kCICategoryHighDynamicRange 用于HDR

三、使用步驟

1.實(shí)例CIImage -> 先把UIImage -> CGImageRef -> CIImage
2.創(chuàng)建CIFilter濾鏡并給濾鏡設(shè)置屬性(KVC)
3.創(chuàng)建CIContext上下文
4.初始化一個(gè)CGImageRef 輸出圖片對(duì)象 合并濾鏡輸出的圖像
5.賦給UIImage對(duì)象進(jìn)行顯示
6.如果想使用濾鏡鏈 可以再次添加效果

四、一個(gè)實(shí)例解析 濾鏡 濾鏡鏈 保存圖片

代碼示例:
#import "ViewController.h"http://宏定義 屏幕的寬
#define SCREEN_WIDTH CGRectGetWidth([UIScreen mainScreen].bounds)

    //注意掛上代理
    @interface ViewController ()    <UIImagePickerControllerDelegate,UINavigationControllerDelegate>
    {

        UIImageView *myImageView;//接收?qǐng)D片的視圖
        UIButton *photoButton;//從本地相冊(cè)選擇圖片的按鈕
        UIButton *filterButton;//添加濾鏡的按鈕
        UIButton *saveButton;//濾鏡后保存到本地相冊(cè)的按鈕
    }
    @end
    @implementation ViewController
    - (void)viewDidLoad {
    [super viewDidLoad];
   //去除導(dǎo)航欄的高度
       self.edgesForExtendedLayout = UIRectEdgeNone;
   //設(shè)置背景色
       self.view.backgroundColor = [UIColor greenColor];

   //    創(chuàng)建按鈕
       NSArray *titleButtonList = @[@"photo",@"Filter",@"save"];
       for (int i=0; i<titleButtonList.count; i++) {
           UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(20+80*i, 20, 60, 40);
    [button setTitle:titleButtonList[i] forState:UIControlStateNormal];
    button.tag = 10 +i ;
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    button.backgroundColor = [UIColor cyanColor];
    [self.view addSubview:button];
           }

       //    初始化圖片視圖
           myImageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, SCREEN_WIDTH-40, 300)];
           myImageView.backgroundColor = [UIColor cyanColor];
           [self.view addSubview:myImageView];

           photoButton = [self.view viewWithTag:10];
           filterButton = [self.view viewWithTag:11];
           saveButton = [self.view viewWithTag:12];

       //    給三個(gè)按鈕添加觸發(fā)事件
           [photoButton addTarget:self action:@selector(photoAction:) forControlEvents:UIControlEventTouchUpInside];
       //    濾鏡按鈕
           [filterButton addTarget:self action:@selector(filterAction:) forControlEvents:UIControlEventTouchUpInside];
       //保存濾鏡后圖片的按鈕
           [saveButton addTarget:self action:@selector(saveAction:) forControlEvents:UIControlEventTouchUpInside];

       }
       //選擇圖片
       - (void)photoAction:(UIButton *)sender{
           UIImagePickerController *pickerController = [[UIImagePickerController alloc]init];
           pickerController.delegate = self;
           [self presentViewController:pickerController animated:YES completion:nil];
       }

       //把圖片放在圖片視圖上
       - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
           UIImage *image = info[UIImagePickerControllerOriginalImage];
           myImageView.image = image;
           [self dismissViewControllerAnimated:YES completion:nil];
       }

       //濾鏡按鈕的觸發(fā)方法
       - (void)filterAction:(UIButton *)sender{

       //    1.源圖
           CIImage *inputImage = [CIImage imageWithCGImage:myImageView.image.CGImage];
       //    2.濾鏡
           CIFilter *filter = [CIFilter filterWithName:@"CIColorMonochrome"];
       //    NSLog(@"%@",[CIFilter filterNamesInCategory:kCICategoryColorEffect]);//注意此處兩個(gè)輸出語(yǔ)句的重要作用
            NSLog(@"%@",filter.attributes);

           [filter setValue:inputImage forKey:kCIInputImageKey];

           [filter setValue:[CIColor colorWithRed:1.000 green:0.165 blue:0.176 alpha:1.000] forKey:kCIInputColorKey];
           CIImage *outImage = filter.outputImage;
           [self addFilterLinkerWithImage:outImage];

       }

       //再次添加濾鏡  形成濾鏡鏈
       - (void)addFilterLinkerWithImage:(CIImage *)image{

           CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"];
           [filter setValue:image forKey:kCIInputImageKey];
           [filter setValue:@(0.5) forKey:kCIInputIntensityKey];

       //    在這里創(chuàng)建上下文  把濾鏡和圖片進(jìn)行合并
           CIContext *context = [CIContext contextWithOptions:nil];
           CGImageRef resultImage = [context createCGImage:filter.outputImage fromRect:filter.outputImage.extent];
           myImageView.image = [UIImage imageWithCGImage:resultImage];

       }

       //保存濾鏡后的圖片到本地相冊(cè)
       - (void)saveAction:(UIButton *)sender{
           UIImageWriteToSavedPhotosAlbum(myImageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
       }

       //保存成功調(diào)用的方法
       - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
           NSLog(@"保存成功");
       }
       @end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末误辑,一起剝皮案震驚了整個(gè)濱河市沧踏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巾钉,老刑警劉巖翘狱,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異砰苍,居然都是意外死亡潦匈,警方通過查閱死者的電腦和手機(jī)赚导,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門茬缩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凰锡,你說我怎么就攤上這事∪Π担” “怎么了掂为?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)员串。 經(jīng)常有香客問我勇哗,道長(zhǎng),這世上最難降的妖魔是什么寸齐? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任欲诺,我火速辦了婚禮,結(jié)果婚禮上渺鹦,老公的妹妹穿的比我還像新娘扰法。我一直安慰自己,他們只是感情好海铆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布迹恐。 她就那樣靜靜地躺著,像睡著了一般卧斟。 火紅的嫁衣襯著肌膚如雪殴边。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天珍语,我揣著相機(jī)與錄音锤岸,去河邊找鬼。 笑死板乙,一個(gè)胖子當(dāng)著我的面吹牛是偷,可吹牛的內(nèi)容都是我干的拳氢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蛋铆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼馋评!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起刺啦,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤留特,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后玛瘸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜕青,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年糊渊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了右核。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渺绒,死狀恐怖贺喝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芒篷,我是刑警寧澤搜变,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站针炉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏扳抽。R本人自食惡果不足惜篡帕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贸呢。 院中可真熱鬧镰烧,春花似錦、人聲如沸楞陷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)固蛾。三九已至结执,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間艾凯,已是汗流浹背献幔。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趾诗,地道東北人蜡感。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親郑兴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子犀斋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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