Core Image是iOS中的圖像處理框架,使用上比較簡單方便,常用于照片的濾鏡處理,還有就是面部檢測(沒有識別)等用途。
CoreImage框架里主要包括以下幾個我們常用的模塊:
CIImage:這是代表圖像的類。
CIFilter:代表濾鏡的一個類,能夠通過key-value來設置輸入值,用于為CIImage添加濾鏡。
CIContext:用于渲染CIImage。
CIDetector:用于分析CIImage,得到CIFeature。
CIFeature\CIFaceFeature:這部分主要用于面部檢測等應用。
在使用CoreImage的時候,處理流程比較簡單,基本流程如下:
- 初始化CIImage;
- 初始化濾鏡CIFilter,通過鍵-值編碼設置輸入值。(也就是設置什么濾鏡)
- 將圖片輸入到濾鏡當中;
- 將處理好的圖片輸出;
- 初始化CIContext;
- 通過CIContext獲取到CGImage句柄,最終獲取到圖片;如CIContext是基于GPU的,可以用Open ES 2.0畫出來;
- 使用完后,記得釋放CGImageRef;
下面有一個為圖片加上高斯模糊的例子:
UIImage *image = [UIImage imageNamed:@"cat.jpg"];
//coreImage使用部分
CIImage *ciImage = [[CIImage alloc] initWithImage:image];
//選擇高斯模糊濾鏡
CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
//將圖片輸入到濾鏡
[blurFilter setValue:ciImage forKey:kCIInputImageKey];
//輸出圖像
CIImage *outCiImage = [blurFilter valueForKey:kCIOutputImageKey];
CIContext *ciContext = [CIContext contextWithOptions:nil];
CGImageRef outCGImage = [ciContext createCGImage:outCiImage fromRect[outCiImage extent]];
//最終圖片
UIImage *blurImage = [UIImage imageWithCGImage:outCGImage];
//釋放
CGImageRelease(outCGImage);
效果如下:
原始圖像(喵^-^)
高斯模糊后的圖片
如果要設置模糊程度,即在將圖片輸入濾鏡后,修改濾鏡的值就是了,如:
//設置濾鏡的模糊程度,設置成100
[blurFilter setValue:@(100) forKey:kCIInputRadiusKey];
//要查看有哪些屬性可以設置,可以打印出屬性來查看
NSLog(@"%@",[blurFilter attributes]);
Log出來的屬性信息:
打印出來的部分信息
這里面可以看到,在上面設置濾鏡的圖片的時候用的kCIOutputImageKey對應的就是inputImage那個字段;而下面inputRadius就是可以調節模糊程度的,告訴了這個值的一些信息,如類型、默認值、描述等,一般帶input的字段就可以設置值來調節了,所以對應著就是設置kCIInputRadiusKey值就可以改變模糊程度了。
如下面是不同的模糊程度的對比:
設置模糊程度5
設置模糊程度100
其他濾鏡用法相似。列舉常用的幾個:
CIColorControls:可調節圖片的亮度、對比度、飽和度等。
CIColorInvert:反轉顏色的濾鏡。
CISepiaTone:變棕色的濾鏡。
CIPixellate:像素濾鏡。(恩,可以愉快的打馬賽克了)
PS:
在簡書上看到的文章也記錄一下:使用Core Image 濾鏡