GpuImage簡單使用


 聲明變量

@interface **********
{
    GPUImageVideoCamera *Camera;
    GPUImageOutput *Filters;
    GPUImageView *CameraShowView;
}

首先是Camera,一種是GPUImageStillCamera,另一個種為GPUImageVideoCamera.正如其命名,如果只是拍照使用前者.錄制視頻使用后者.

    //init, 第一個參數分辨率 第二個參數,前后攝像頭選擇
    Camera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionFront];
    Camera.outputImageOrientation = UIInterfaceOrientationPortrait;
    Camera.horizontallyMirrorFrontFacingCamera = NO;
    Camera.horizontallyMirrorRearFacingCamera = NO;

其次camera獲取視頻(圖片)后,加以濾鏡也就是filter, filter可以疊加,也可以自定義(比如美顏).

    //黑白濾鏡
    Filters = [GPUImageColorPackingFilter new];
    //將將濾鏡加至攝像頭
    [Camera addTarget:Filters];

最后輸出處理后的視頻或圖片,這里可以可以直接輸出至屏幕,也可以使用GPUImageMovieWriter,也就是錄制了.

    //用於顯示視頻的GPUImageView
    CameraShowView =   [[GPUImageView alloc] initWithFrame:CGRectMake(0, 64,self.view.frame.size.width,self.view.frame.size.width*1.25)];
    [CameraShowView setInputRotation:kGPUImageFlipHorizonal atIndex:0];
    CameraShowView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
    [self.view addSubview:CameraShowView];
    //將視頻輸出到->CameraShowView
    [Filters addTarget:CameraShowView];

當然也不要忘記啟動

    //視頻啟動
    [Camera startCameraCapture];

 

其他

//前后攝像頭切換
-(void)VideoPosition:(UIButton*)Button{

    [Camera rotateCamera];
    
    Button.selected = !Button.selected;
}

//閃關燈
-(void)LightBtn:(UIButton*)Btn{
    
    if (Camera.inputCamera.position == AVCaptureDevicePositionBack) {
        
        if (Btn.selected) {
            
            [Camera.inputCamera lockForConfiguration:nil];
            [Camera.inputCamera setTorchMode:AVCaptureTorchModeOff];
            [Camera.inputCamera unlockForConfiguration];
            
        }else{
            
            [Camera.inputCamera lockForConfiguration:nil];
            [Camera.inputCamera setTorchMode:AVCaptureTorchModeOn];
            [Camera.inputCamera unlockForConfiguration];
        }

        Btn.selected = !Btn.selected;
        
    }else{
        
        NSLog(@"當前使用前置攝像頭,未能開啟閃光燈");
        
    }
    

}

 

多濾鏡疊加,

由於項目要求,視頻在錄制的時候,需要使用特殊的比例(1比1),而在GPUImageVideoCamera的默認配置里,並沒有這個比例.

所以考慮到錄制的過程中需要使用美顏的濾鏡,所以需使用GPUImageFilterGroup.以下就是添加了一個裁剪的濾鏡

    //其實也就是filter替換成FilterGroup
    _filterGroup = [[GPUImageFilterGroup alloc] init];
    //這里可以添加多個不同濾鏡
    [self addGPUImageFilter:[[GPUImageCropFilter alloc] initWithCropRegion:CGRectMake(0.0, 0.0, 1.0,0.5625)]];
    

addGPUImageFilter

//添加濾鏡
- (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;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM