初級(jí)使用(一)
- 給image添加濾鏡,然后顯示到UIImageView上
self.mGPUImageView = [[GPUImageView alloc]init];
self.mGPUImageView.fillMode = kGPUImageFillModeStretch;
GPUImageFilter *filter = [[GPUImageWeakPixelInclusionFilter alloc] init];
UIImage *image = [UIImage imageNamed:@"face"];
self.mGPUImageView.image = [filter imageByFilteringImage:image];
初級(jí)使用(二)
- 從攝像頭獲取數(shù)據(jù)源,并且添加濾鏡,展示在UIImageView上;無錄像
//1. 創(chuàng)建
self.mGPUVideoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1920x1080 cameraPosition:AVCaptureDevicePositionBack];
self.mGPUImageView = [[GPUImageView alloc]init];
self.mGPUImageView.fillMode = kGPUImageFillModeStretch;
//2.mGPUVideoCamera -> filter -> mGPUImageView
//添加響應(yīng)鏈
GPUImageSepiaFilter* filter = [[GPUImageSepiaFilter alloc] init];
[self.mGPUVideoCamera addTarget:filter];
[filter addTarget:self.mGPUImageView];
//3.啟動(dòng)相機(jī)
[self.mGPUVideoCamera startCameraCapture];
//可有可無
//監(jiān)聽屏幕方向,修改攝像頭的輸出方向
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
- (void)deviceOrientationDidChange:(NSNotification *)notification {
UIInterfaceOrientation orientation = (UIInterfaceOrientation)[UIDevice currentDevice].orientation;
self.mGPUVideoCamera.outputImageOrientation = orientation;
}
初級(jí)使用(三)
//1.創(chuàng)建
self.videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionFront];
self.videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
self.videoCamera.horizontallyMirrorFrontFacingCamera = YES;
self.filterView = [[GPUImageView alloc] initWithFrame:self.view.frame];
self.filterView.center = self.view.center;
[self.view addSubview:self.filterView];
//2.設(shè)置保存路徑
NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
unlink([pathToMovie UTF8String]);//刪除路徑下的文件
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
//3. 添加響應(yīng)鏈
//videoCamera -> beautifyFilter -> self.filterView
-> _movieWriter
_movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(640.0, 480.0)];
self.videoCamera.audioEncodingTarget = _movieWriter;
_movieWriter.encodingLiveVideo = YES;
[self.videoCamera startCameraCapture];
GPUImageBeautifyFilter *beautifyFilter = [[GPUImageBeautifyFilter alloc] init];
[self.videoCamera addTarget:beautifyFilter];
[beautifyFilter addTarget:self.filterView];
[beautifyFilter addTarget:_movieWriter];
[_movieWriter startRecording];
初級(jí)使用(四)
- 給GPUImage 添加濾鏡組<轉(zhuǎn)>
// 圖片輸入源
_inputImage = [UIImage imageNamed:@"icon"];
// 初始化 picture
_picture = [[GPUImagePicture alloc] initWithImage:_inputImage smoothlyScaleOutput:YES];
// 初始化 imageView
_imageView = [[GPUImageView alloc] initWithFrame:self.iconImageView.bounds];
[self.iconImageView addSubview:_imageView];
// 初始化 filterGroup
_filterGroup = [[GPUImageFilterGroup alloc] init];
[_picture addTarget:_filterGroup];
// 添加 filter
/**
原理:
1. filterGroup(addFilter) 濾鏡組添加每個(gè)濾鏡
2. 按添加順序(可自行調(diào)整)前一個(gè)filter(addTarget) 添加后一個(gè)filter
3. filterGroup.initialFilters = @[第一個(gè)filter]];
4. filterGroup.terminalFilter = 最后一個(gè)filter;
*/
GPUImageRGBFilter *filter1 = [[GPUImageRGBFilter alloc] init];
GPUImageToonFilter *filter2 = [[GPUImageToonFilter alloc] init];
GPUImageColorInvertFilter *filter3 = [[GPUImageColorInvertFilter alloc] init];
GPUImageSepiaFilter *filter4 = [[GPUImageSepiaFilter alloc] init];
[self addGPUImageFilter:filter1];
[self addGPUImageFilter:filter2];
[self addGPUImageFilter:filter3];
[self addGPUImageFilter:filter4];
// 處理圖片
[_picture processImage];
[_filterGroup useNextFrameForImageCapture];
- (void)addGPUImageFilter:(GPUImageOutput<GPUImageInput> *)filter
{
[_filterGroup addFilter:filter];
GPUImageOutput<GPUImageInput> *newTerminalFilter = filter;
NSInteger count = _filterGroup.filterCount;
if (count == 1)
{
_filterGroup.initialFilters = @[newTerminalFilter];
_filterGroup.terminalFilter = newTerminalFilter;
} else
{
GPUImageOutput<GPUImageInput> *terminalFilter = _filterGroup.terminalFilter;
NSArray *initialFilters = _filterGroup.initialFilters;
[terminalFilter addTarget:newTerminalFilter];
_filterGroup.initialFilters = @[initialFilters[0]];
_filterGroup.terminalFilter = newTerminalFilter;
}
上面這幾個(gè)例子其實(shí)表示的很清楚了,GPUImage的常規(guī)使用方式就是source(視頻、圖片源) -> filter(濾鏡) -> final target (處理后視頻、圖片)按照這一套流程來的
最后編輯于 :
?著作權(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ù)。