GPUImage学习(-)

882 阅读2分钟

一、前言

        由于不会使用OpenGL ES和Mental,作为iOS开发者,不妨学习一下GPUImage的使用,GPUImage提供了120多种滤镜的效果,可以自己替换。作为入门选手,是不二选择。GPUImage的github地址:github.com/BradLarson/…

 二、使用测试

 2.1创建一个高亮度的滤镜

- (UIImage *)AdjustImgBright: (CGFloat)bright{    
    //创建一个高亮度的滤镜    
    GPUImageBrightnessFilter *brightFilter = [[GPUImageBrightnessFilter alloc]init];   
    brightFilter.brightness = bright;   
    //设置要渲染的区域    
    [brightFilter forceProcessingAtSize:self.editImage.size];    
    [brightFilter useNextFrameForImageCapture];    
    //获取数据源    
    GPUImagePicture *imageSource = [[GPUImagePicture alloc]initWithImage:self.adjustImage];    
    //添加滤镜    
    [imageSource addTarget: brightFilter];    
    //开始渲染    
    [imageSource processImage];    
    //获取渲染后的图片    
    UIImage *newImage = [brightFilter imageFromCurrentFramebuffer];        
    return newImage;
}

2.2 给相机添加滤镜

初始化相机;

初始化滤镜;

初始化GPUImageView;

将初始化过的相机加到目标滤镜上;

将滤镜加在目标GPUImage上;

GPUImage加在控制器视图上;

相机开始捕捉画面;

将相机捕捉的画面存在手机的相册中

#paragma 初始化相机
 self._camera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1280x720 cameraPosition:AVCaptureDevicePositionFront];
 //竖屏方向
 self._camera.outputImageOrientation = UIInterfaceOrientationPortrait;
 //这里测试一下哈哈镜滤镜GPUImageStretchDistortionFilter *hahaFilter = [[GPUImageStretchDistortionFilter alloc] init]; 
//初始化GPUImageView,并设置frame 
 self._GPUImageView = [[GPUImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 400)];
 //将初始化过的相机加到目标滤镜上
[self._camera addTarget: hahaFilter];
//将滤镜加在目标GPUImage上
 [self.view addSubview:self._GPUImageView];

 //相机开始捕捉画面
 [self._camera startCameraCapture]; //将相机捕捉的画面存在手机的相册中
 //定格一张图片 保存到相册[self._camera capturePhotoAsPNGProcessedUpToFilter:self.hahaFilter withCompletionHandler:^(NSData *processedPNG, NSError *error) {        
    //拿到相册,需要引入Photo Kit
    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
        //写入图片到相册
        PHAssetChangeRequest *req = [PHAssetChangeRequest creationRequestForAssetFromImage:[UIImage imageWithData:processedPNG]];
    } completionHandler:^(BOOL success, NSError * _Nullable error) { 
        NSLog(@"成功:success = %d, 失败原因:error = %@", success, error);
    }];   
}];

三、结语

       GPUImage的使用这里只是初步学习别人的代码,欢迎iOS开发的同志们一起学习!开发了两年多,内心已经对纯粹的页面逻辑处理出现了抵触的情绪,想要在特殊的领域去探索一下,本文也是在看了音视频开发视频需要用到的知识之后学习了一下,后面还要继续努力!