GPUImage

zhYx__發表於2017-10-09
  • 處理頭像的框架

    • 使用Core Graphics庫 (系統)
    • 使用Core Image庫 (系統)
    • 使用GPUImage庫 (第三方)
  • github地址 : https://github.com/BradLarson/GPUImage

  • CocoaPods整合 : pod 'GPUImage'
  • 影像處理原理

    • 每個畫素點都有亮度值/畫素值,即RGB的色值平均值
    • 影像處理的基礎是處理畫素值

    濾鏡基本使用

    獲取原圖

    - (void)loadOriginImage {
        NSString *path = [[NSBundle mainBundle] pathForResource:@"filter.jpg" ofType:nil];
        UIImage *originImage = [UIImage imageWithContentsOfFile:path];
        // 記錄原始圖片
        _originImage = originImage;
        self.imgView.image = originImage;
    }
    

    濾鏡使用步驟

    1. 獲取原始圖片 GPUImagePicture
    2. 建立濾鏡 GPUImageSepiaFilter (以懷舊濾鏡為例)
    3. 向圖片新增濾鏡 [Picture addTarget:Filter];
    4. 開始處理/渲染圖片 [Filter useNextFrameForImageCapture];[Picture processImage];
    5. 輸出處理後的圖片 UIImage *outputImage = [Filter imageFromCurrentFramebuffer];
    6. 展示濾鏡處理後的圖片 imageView.image = outputImage;

    懷舊濾鏡

    - (IBAction)huaijiuImage:(id)sender {
        // 1.獲取原始圖片,指定為GPUImagePicture
        GPUImagePicture *GPUPicture = [[GPUImagePicture alloc] initWithImage:_originImage];
        // 2.建立`懷舊`濾鏡
        GPUImageSepiaFilter *sepiaFilter = [GPUImageSepiaFilter new];
        // 3.向圖片新增濾鏡
        [GPUPicture addTarget:sepiaFilter];
        // 4.開始處理/渲染圖片
        [sepiaFilter useNextFrameForImageCapture];
        [GPUPicture processImage];
        // 5.輸出處理後的圖片
        UIImage *outputImage = [sepiaFilter imageFromCurrentFramebuffer];
        // 6.展示濾鏡處理後的圖片
        self.imgView.image = outputImage;
    
        /* 其中2~6步,可以替換成以下程式碼(簡寫) */
    //    self.imgView.image = [sepiaFilter imageByFilteringImage:_originImage];
    }
    

    高斯模糊濾鏡

    - (IBAction)gaussianBlurImage:(id)sender {
        // 1.獲取原始圖片,指定為GPUImagePicture
        GPUImagePicture *GPUPicture = [[GPUImagePicture alloc] initWithImage:_originImage];
        // 2.建立`高斯模糊`濾鏡
        GPUImageGaussianBlurFilter *gaussianBlurFilter = [GPUImageGaussianBlurFilter new];
        // 3.向圖片新增濾鏡
        [GPUPicture addTarget:gaussianBlurFilter];
        // 4.開始處理/渲染圖片
        [gaussianBlurFilter useNextFrameForImageCapture];
        [GPUPicture processImage];
        // 5.輸出處理後的圖片
        UIImage *outputImage = [gaussianBlurFilter imageFromCurrentFramebuffer];
        // 6.展示濾鏡處理後的圖片
        self.imgView.image = outputImage;
    
        /* 其中2~6步,可以替換成以下程式碼(簡寫) */
    //    self.imgView.image = [gaussianBlurFilter imageByFilteringImage:_originImage];
    }
    

    素描濾鏡

    - (IBAction)sumioaImage:(id)sender {
        // 1.獲取原始圖片,指定為GPUImagePicture
        GPUImagePicture *GPUPicture = [[GPUImagePicture alloc] initWithImage:_originImage];
        // 2.建立`素描`濾鏡
        GPUImageSketchFilter *sketchFilter = [GPUImageSketchFilter new];
        // 3.向圖片新增濾鏡
        [GPUPicture addTarget:sketchFilter];
        // 4.開始處理/渲染圖片
        [sketchFilter useNextFrameForImageCapture];
        [GPUPicture processImage];
        // 5.輸出濾鏡處理後的圖片
        UIImage *outputImage = [sketchFilter imageFromCurrentFramebuffer];
        // 6.展示濾鏡處理後的圖片
        self.imgView.image = outputImage;
    
        /* 其中2~6步,可以替換成以下程式碼(簡寫) */
    //    self.imgView.image = [sketchFilter imageByFilteringImage:_originImage];
    }