iOS之濾鏡

因?yàn)樾枨笤颍蛱煊趾煤没仡櫫艘幌聻V鏡的知識(shí),記錄下來,免得忘掉,老了,記性總是出奇的差,哈哈??

1.CIImage:

保存圖像數(shù)據(jù)的類 CGImageRef->圖像中的數(shù)據(jù)
下面是CIImage對(duì)象的創(chuàng)建,方式有很多,我只是列舉了這種
CIImage *inputImage = [CIImage imageWithCGImage:self.imageView.image.CGImage];

2.CIFilter:

濾鏡類 圖片屬性進(jìn)行細(xì)節(jié)處理的類 它對(duì)所有的像素進(jìn)行操作 用鍵-值(KVC)來設(shè)置,所有的濾鏡效果就像一棵樹的分叉一般,有很多的樹枝,樹枝就是濾鏡的大概效果,然而具體的樣子就是每一個(gè)樹枝的葉子,這 才是你所需要的濾鏡效果 也就是value。

3.CIContext:

上下文是實(shí)現(xiàn)對(duì)圖像處理的具體對(duì)象 ,濾鏡對(duì)象輸出的圖像并不是合成之后的圖像 需要使用圖像處理的上下文 合并 輸出的圖像

4介紹一下樹枝,濾鏡的主要類

kCICategoryDistortionEffect 扭曲效果,比如bump、旋轉(zhuǎn)、holekCICategoryGeometryAdjustment 幾何開著調(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

以上這些就是主要類別,每一個(gè)類別之下包含了很多的濾鏡效果,那么怎么查看這些效果那 2中方法
1、就是通過調(diào)用類方法,比如查看kCICategoryColorEffect 效果下的所有濾鏡名稱

 NSLog(@"%@",[CIFilter filterNamesInCategory:kCICategoryColorEffect]);

2、我們知道了濾鏡名稱,但是不知道有哪些參數(shù),參數(shù)該如何設(shè)置
這個(gè)時(shí)候我就想到了查看蘋果文檔,


image.png

3、打開之后,按照如圖, 點(diǎn)擊2,進(jìn)入詳情


image.png

4、可以看到,左邊是主要分類,而右邊則是該分類下的濾鏡效果

image.png

5、我們打開第一種kCICategoryBlur 類, 查看CIBoxBlur 的效果,很方便,連效果圖有展示出來了,我們就知道這種是不是我們需要的效果,而且參數(shù)也有 2個(gè) inputImage, inputRadius ,但是在代碼中 我們需要加上前綴kCI,也就變成了kCIInputImageKey 和 kCIInputRadiusKey

image.png

4直接貼代碼,方便理解

//將uiimage 轉(zhuǎn)化成CIImage
   CIImage *inputImage = [CIImage imageWithCGImage:self.imageView.image.CGImage];
//創(chuàng)建CIBoxBlur濾鏡效果的濾鏡對(duì)象
   CIFilter *filter = [CIFilter filterWithName:@"CIBoxBlur"];
//對(duì)該濾鏡效果的參數(shù)進(jìn)行設(shè)置
   [filter setValue:inputImage forKey:kCIInputImageKey];
   [filter setValue:@100 forKey:kCIInputRadiusKey];
forKey:kCIInputCenterKey];
//輸出效果
   CIImage *outPutImage = filter.outputImage;
//創(chuàng)建上下文
   CIContext *context = [CIContext contextWithOptions:nil];

//這個(gè)是在CPU中進(jìn)行渲染,優(yōu)點(diǎn)是可以后臺(tái)處理圖片
//    NSNumber *number=[NSNumber numberWithBool:YES];
//    NSDictionary *option=[NSDictionary dictionaryWithObject:number forKey:kCIContextUseSoftwareRenderer];
//    _context=[CIContext contextWithOptions:option];

//這個(gè)是在GPU中進(jìn)行渲染,優(yōu)點(diǎn)是速度快,但是只能在前臺(tái)
//    EAGLContext *eaglContext=[[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES1];
//    _context=[CIContext //contextWithEAGLContext:eaglContext];//OpenGL優(yōu)化過的圖像上下文

//在上下文中,將圖片和該濾鏡效果進(jìn)行融合,此處才是真正的合成該效果
   CGImageRef imageRef = [context createCGImage:outPutImage fromRect:outPutImage.extent];
//展示
    self.imageView.image = [UIImage imageWithCGImage:imageRef];

原效果


image.png

加入濾鏡之后的效果


image.png

可以看到 模糊的效果是很明顯的
至此,濾鏡的思路以及使用方法也就清晰了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容