使用GPUImage 實現利用GPU來實習濾鏡(實時濾鏡 和iphone手機一樣)
一:將GPUImage 新增到工程
兩篇資料
注意:
二:使用
a: 圖片使用濾鏡
GPUImageFilter *selectedFilter;
switch (buttonIndex) {
case 0:
selectedFilter = [[GPUImageGrayscaleFilter alloc] init];
break;
case 1:
selectedFilter = [[GPUImageSepiaFilter alloc] init
break;
case 2:
selectedFilter = [[GPUImageSketchFilter alloc] init];
break;
case 3:
selectedFilter = [[GPUImagePixellateFilter alloc] init];
break;
case 4:
selectedFilter = [[GPUImageColorInvertFilter alloc
break;
case 5:
selectedFilter = [[GPUImageToonFilter alloc] init];
break;
case 6:
selectedFilter = [[GPUImagePinchDistortionFilter alloc] init];
break;
case 7:
selectedFilter = [[GPUImageFilter alloc
break;
default:
break;
}
//關鍵程式碼:
UIImage *filterImage=[selectedFilter imageByFilteringImage:self.selectImage];
self.showImageView.image=filterImage;
b:實時濾鏡
videoCamera = [[GPUImageVideoCameraalloc] initWithSessionPreset:AVCaptureSessionPreset640x480cameraPosition:AVCaptureDevicePositionBack];
// videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionFront];
// videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1280x720 cameraPosition:AVCaptureDevicePositionBack];
// videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1920x1080 cameraPosition:AVCaptureDevicePositionBack];
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
videoCamera.horizontallyMirrorFrontFacingCamera = NO;
videoCamera.horizontallyMirrorRearFacingCamera = NO;
filter = [[GPUImageSketchFilteralloc] init];
GPUImageView *filterView = [[GPUImageView alloc] initWithFrame:CGRectMake(10, 100, 100, 100)];
filterView.fillMode=kGPUImageFillModePreserveAspectRatioAndFill;
[self.view addSubview:filterView];
[filter addTarget:filterView];
[videoCamera addTarget:filter];
GPUImageColorInvertFilter *filter1= [[GPUImageColorInvertFilteralloc] init];
GPUImageView *filterView1 = [[GPUImageView alloc] initWithFrame:CGRectMake(110, 100, 100, 100)];
filterView1.fillMode=kGPUImageFillModePreserveAspectRatioAndFill;
[self.view addSubview:filterView1];
[filter1 addTarget:filterView1];
[videoCamera addTarget:filter1];
GPUImageGrayscaleFilter *filter2= [[GPUImageGrayscaleFilteralloc] init];
GPUImageView *filterView2 = [[GPUImageView alloc] initWithFrame:CGRectMake(210, 100, 100, 100)];
filterView2.fillMode=kGPUImageFillModePreserveAspectRatioAndFill;
[self.view addSubview:filterView2];
[filter2 addTarget:filterView2];
[videoCamera addTarget:filter2];
[videoCamerastartCameraCapture];