GPUImage 是基於 GPU 處理圖像的一個開源庫, 提供了各種圖像處理濾鏡,例如調 亮度/飽和度/曝光度/白平衡/銳化等濾鏡.
並且支持照相機/攝像機 的實時濾鏡.
GPUImage采用鏈式方式來處理畫面,通過addTarget:方法為鏈條添加每個環節的對象,處理完一個target,就會把上一個環節處理好的圖像數據傳遞下一個target去處理,稱為GPUImage處理鏈.
https://github.com/BradLarson/GPUImage
圖片濾鏡
//調整圖像的對比度
- (void)changeContrast{
//對比度
// GPUImageContrastFilter *filter = [[GPUImageContrastFilter alloc]init];
// filter.contrast = self.slider.value;
//飽和度
// GPUImageSaturationFilter *filter = [[GPUImageSaturationFilter alloc]init];
// filter.saturation = self.slider.value;
//曝光度
// GPUImageExposureFilter *filter = [[GPUImageExposureFilter alloc] init];
// filter.exposure = self.slider.value;
//色溫(白平衡)
GPUImageWhiteBalanceFilter *filter = [[GPUImageWhiteBalanceFilter alloc] init];
filter.temperature = self.slider.value;
filter.tint = 0.0;
//設置要渲染的區域
[filter forceProcessingAtSize:_image.size];
//獲取 GPU 圖片
GPUImagePicture *pic = [[GPUImagePicture alloc]initWithImage:_image];
//添加濾鏡
[pic addTarget:filter];
//開始渲染
[pic processImage];
//(需要調用一下? why?)
[filter useNextFrameForImageCapture];
//獲取渲染后的圖片
UIImage *newImage = [filter imageFromCurrentFramebuffer];
self.imageView.image = newImage;
}
實時相機濾鏡
//創建相機(注意:當前vc需持有camera, 否則會提前釋放) camera = [[GPUImageVideoCamera alloc]initWithSessionPreset:AVCaptureSessionPresetHigh cameraPosition:AVCaptureDevicePositionFront]; camera.outputImageOrientation = UIInterfaceOrientationPortrait; //創建最終預覽視圖 view GPUImageView *cameraView = [[GPUImageView alloc]initWithFrame:self.view.frame]; [self.view insertSubview:cameraView atIndex:0]; //創建濾鏡組合: 磨皮,美白 GPUImageFilterGroup *groupFilter = [[GPUImageFilterGroup alloc]init]; //磨皮濾鏡 GPUImageBilateralFilter *bilateralFilter = [[GPUImageBilateralFilter alloc]init]; [groupFilter addTarget:bilateralFilter]; //美白濾鏡 GPUImageBrightnessFilter *brightFilter = [[GPUImageBrightnessFilter alloc]init]; [groupFilter addTarget:brightFilter]; //設置濾鏡組鏈 [bilateralFilter addTarget:brightFilter]; [groupFilter setInitialFilters:@[bilateralFilter]]; groupFilter.terminalFilter = brightFilter; //設置 GPUImage 處理鏈,從數據源->濾鏡->最終頁面效果 [camera addTarget:groupFilter]; [groupFilter addTarget:cameraView]; //相機開始捕獲 [camera startCameraCapture];
參考:
//濾鏡效果
http://blog.csdn.net/gaojq_ios/article/details/46926559
//實時濾鏡(相機)
https://www.jianshu.com/p/b1d3ef7fdf7a
https://www.jianshu.com/p/2ce9b63ecfef
http://blog.csdn.net/xoxo_x/article/details/58357978
博客:(總結)
http://blog.csdn.net/xoxo_x/article/details/52695032
GPUImage 原理
http://blog.csdn.net/qq_29846663/article/details/53707482
GPUImage所有濾鏡介紹
http://www.360doc.com/content/15/0907/10/19175681_497418716.shtml
