CoreImage 圖片處理

CoreImage 是蘋果 iOS5新增的一個 OC 框架,提供了強大的圖像處理功能, 用於對基於像素的圖像進行操做與分析, 提供了不少濾鏡(Filter),造成強大的自定義效果css

CIImage 類框架

用於保存圖像數據, 初始化方法:ide

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

CFFilter 濾鏡類ui

實例化濾鏡對象,經過鍵-值KVC來設置輸入值,及效果的改變. spa

1. 一般 CIFilter 對象須要一個或多個圖像做爲輸入,-> 2.經過 KVC 設置一些參數 -> 3.併產生 CIImage 類型的實體做爲輸出3d

CIFilter * filter = [CIFilter filterWithName:@"CIGaussianBlur"]; 

下面是查詢須要的濾鏡種類的方法:code

1.查詢 效果分類中 包含什麼效果:filterNamesInCategory:對象

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

 

CIContext 上下文接口

CIContext 又稱上下文用來渲染 CIImage, 將做用在 CIImage 上的濾鏡鏈 應用到原始的圖片數據

獲得處理後的圖片:

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];
 

使用步驟:

1.建立 CIImage對象

2.建立 CIFilter 濾鏡對象

3.利用 KVC 設置濾鏡對象的屬性

4.經過濾鏡對象獲取處理後圖片

5.建立 CIContext對象, 將獲得的圖片渲染到視圖上

🌰例子:

//模糊設置處理

 

-(void)filterGaussianBlur

{

    

    //建立CIContext對象

    CIContext * context = [CIContext contextWithOptions:nil];

    //獲取圖片

    CIImage * image = [CIImage imageWithCGImage:[_image CGImage]];

    //建立CIFilter

    CIFilter * gaussianBlur = [CIFilter filterWithName:@"CIGaussianBlur"];

    //設置濾鏡輸入參數

    [gaussianBlur setValue:image forKey:@"inputImage"];

    //設置模糊參數

    [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 * image1 = [UIImage imageWithCGImage:imageRef];

    [_imageView setImage:image1];

    CFRelease(imageRef);

    

}

 

 

 

//舊色調處理

-(void)filterSepiaTone

{

    //建立CIContext對象(默認值,傳入nil)

    CIContext * context = [CIContext contextWithOptions:nil];

    //獲取圖片

    CIImage *cimage = [CIImage imageWithCGImage:[_image CGImage]];

    //建立CIFilter

    CIFilter * sepiaTone = [CIFilter filterWithName:@"CISepiaTone"];

    //設置濾鏡輸入參數

    [sepiaTone setValue:cimage forKey:@"inputImage"];

    

    //獲取滑塊的Value,設置色調強度

    [sepiaTone setValue:[NSNumber numberWithFloat:[_slider value]]forKey:@"inputIntensity"];

    //建立處理後的圖片

    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);

}

 

參考:

https://www.jianshu.com/p/cd7bb24a68d0

https://www.jianshu.com/p/5ac1b631c33e

//獲取 fileterName

https://www.jianshu.com/p/31dc42d691ac

相關文章
相關標籤/搜索