用GPUImage给相机加滤镜初级教程

自己今天找了一天的资料,总算把这个问题解决了,在此做个笔记,也希望能给像我一样刚接触GPUImage的新手一点帮助。


其实,用GPUImage给相机简单加滤镜(刚接触的时候不要考虑的太复杂)本来并不难,可网上搜索的好多资料,不是代码给的不全就是掺杂的知识点太多,本来简单的一个东西,自己反而越看越糊涂,最后发现官方给的例子才是最清晰明了的。文章最后我会给出链接* (例子+静态库)*。

先看一下我的总结的吧!想做出一个简单的美颜相机,按照下面的步骤就可以了:

  1. 实例化一个GPUImageStillCamera对象A(输入源);
  2. 实例化一个GPUImageFilter对象B(滤镜);
  3. 实例化一个GPUImageView对象C(输出源)
  4. A添加B,B添加C;
  5. 将C添加到控制器的视图上或是key window上,总之就是为了能让你看到相机捕捉到的内容;
  6. A去调用方法:startCameraCapture开始捕捉景物。
  7. A去调用方法:capturePhotoAsJPEGProcessedUpToFilter拍照(定格一张图片)。

如果以上步骤你暂时看不懂,那是正常的,你只需要知道有这几个步骤就可以了,然后对照下面的代码找出这几个步骤就可以了,so easy!

#import "ViewController.h"
#import "GPUImage.h"
#import 

@interface ViewController ()

@property(strong, nonatomic) GPUImageStillCamera *mCamera;
@property(strong, nonatomic) GPUImageFilter *mFilter;
@property(strong, nonatomic) GPUImageView *mGPUImgView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //步骤--------------1
    //第一个参数表示相片的尺寸,第二个参数表示前、后摄像头
    _mCamera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
    //竖屏方向
    _mCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
    
    //步骤--------------2
    //这个滤镜你可以换其它的,官方给出了不少滤镜
    _mFilter = [[GPUImageStretchDistortionFilter alloc] init];
   //步骤--------------3
    _mGPUImgView = [[GPUImageView alloc]initWithFrame:self.view.bounds];
   //步骤--------------4
   [_mCamera addTarget:_mFilter];
    [_mFilter addTarget:_mGPUImgView];
    //步骤--------------5
    [self.view addSubview:_mGPUImgView];
    //步骤--------------6
    [_mCamera startCameraCapture];
    
    //添加一个按钮触发拍照
    UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake((self.view.bounds.size.width-80)*0.5, self.view.bounds.size.height-60, 80, 40)];
    btn.backgroundColor = [UIColor redColor];
    [btn setTitle:@"拍照" forState:UIControlStateNormal];
    
    [self.view addSubview:btn];
    [btn addTarget:self action:@selector(takePhoto) forControlEvents:UIControlEventTouchUpInside];
}

-(void)takePhoto{
    //步骤--------------7
    [_mCamera capturePhotoAsJPEGProcessedUpToFilter:_mFilter withCompletionHandler:^(NSData *processedJPEG, NSError *error){
        //将相片保存到手机相册(iOS8及以上,该方法过期但是可以用,不想用请搜索PhotoKit)
        ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
        
        [library writeImageDataToSavedPhotosAlbum:processedJPEG metadata:_mCamera.currentCaptureMetadata completionBlock:^(NSURL *assetURL, NSError *error2)
         {
             if (error2) {
                 NSLog(@"ERROR: the image failed to be written");
             }
             else {
                 NSLog(@"PHOTO SAVED - assetURL: %@", assetURL);
             }
             
         }];
    }];
}

代码就这么一点,一个简单的滤镜就添加好了。相信应该还是很容易看懂的吧!本人也刚接触GPUImage,如有错误之外望大神指教。

屏幕截图

官方链接在此 ,要想将GPUImage导入自己的项目需要编译其中iOS平台下的静态库,如果你不知道或是不想这么做的话,可以私信我(或邮箱[email protected]),我将编译好了的结果给你。

你可能感兴趣的:(用GPUImage给相机加滤镜初级教程)