GUIImage—2、美颜相机

需要用到的类是:GPUImageStillCamera
作用是:拍摄某一个画面,并且保存图片

初始化GPUImageStillCamera需要用到sessionPreset参数设置:

Paste_Image.png

代码如下:

//
//  ViewController.swift
//  美颜相机
//
//  Created by liyang on 16/12/19.
//  Copyright © 2016年 liyang. All rights reserved.
//

import UIKit
import GPUImage

class ViewController: UIViewController {
    
    @IBOutlet weak var bjImg: UIImageView!
    
    fileprivate lazy var camera: GPUImageStillCamera = GPUImageStillCamera(sessionPreset: AVCaptureSessionPresetHigh, cameraPosition: .back)
    
    // 初始化滤镜
    let bilateralFilter = GPUImageBilateralFilter() // 磨皮
    let exposureFilter = GPUImageExposureFilter() // 曝光
    let brightnessFilter = GPUImageBrightnessFilter() // 美白
    let satureationFilter = GPUImageSaturationFilter() // 饱和
    let fileterGroup = GPUImageFilterGroup()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 1、创建GPUImageStillCamera
        camera.outputImageOrientation = .portrait
        
        // 2、添加滤镜(美白、曝光、磨皮、曝光)
        let filerGroup = getGroupFileters()
        camera.addTarget(filerGroup)
        
        // 3、创建GPUImage,用于实时显示画面
        let showView = GPUImageView(frame: view.bounds)
        view.insertSubview(showView, at: 0)
        filerGroup.addTarget(showView)
        
        // 4、开始补抓
        camera.startCapture()
        
    }
    
    // MARK:- 旋转镜头
    @IBAction func rotateCamera(_ sender: Any) {
        camera.rotateCamera()
    }
    
    // 拍摄照片
    @IBAction func takeCamera(_ sender: Any) {
        camera.capturePhotoAsImageProcessedUp(toFilter: fileterGroup, withCompletionHandler: { (image, error) in
            UIImageWriteToSavedPhotosAlbum(image!, nil, nil, nil)
            
            self.bjImg.image = image
            
            // 停止采集
//            self.camera.stopCapture()
        })
    }
    
    
    
    fileprivate func getGroupFileters() -> GPUImageFilterGroup {
        
        // 2、创建滤镜(设置滤镜的引用关系)
        bilateralFilter.addTarget(brightnessFilter)
        brightnessFilter.addTarget(exposureFilter)
        exposureFilter.addTarget(satureationFilter)
        
        // 3、设置滤镜组链的起点&&终点
        fileterGroup.initialFilters = [bilateralFilter]
        fileterGroup.terminalFilter = satureationFilter
        
        return fileterGroup
    }
}

demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,843评论 25 709
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,751评论 0 15
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,300评论 4 61
  • 月落乌啼霜满天,江枫渔火对愁眠。姑苏城外寒山寺,夜半钟声到客船。
    珠海红叶原创阅读 793评论 1 1
  • 我想我是喜欢你的, 不然怎么会帮素昧平生的你驱走搭讪男生; 我想我是喜欢你的, 不然怎么会在没带手机时记下你的电话...
    X_Rocky阅读 1,592评论 0 0