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 上的濾鏡鏈 應用到原始的圖片數據
獲得處理後的圖片:
使用步驟:
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