swift GPUImage2说明

swift GPUImage2 4.0使用

由于项目需要 做短视频拍摄和 从相册中选择视频添加滤镜, 研究了大半天, 发现GPUImage的强大 于是开始在项目中使用

源码链接
GUPImage源码

demo链接
DEMO链接

如果使用demo 请在真机上运行 不要忘了配置team
swift GPUImage2说明_第1张图片

第一步 先从Github中下载源码 成功后 如下图

swift GPUImage2说明_第2张图片

第二步 把xcodeproj拖入项目中 在配置一下文件 如下图
swift GPUImage2说明_第3张图片

下面就可以愉快的使用了

使用相机时

import UIKit
import GPUImage
import AVFoundation

class AERecordingController: UIViewController {

    var camera: Camera!
    var basicOperation: BasicOperation!
    var renderView: RenderView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        title = "录制视频"
        
        setupUI()
    }
    
    private func setupUI() {
        do {
            camera = try Camera(sessionPreset: AVCaptureSession.Preset.iFrame1280x720,
                                cameraDevice: nil,
                                location: .backFacing,
                                captureAsYUV: true)
        } catch {
            
            print(error)
            return
        }
        
        let filter = SepiaToneFilter()           //黑白
//        let filter1 = LuminanceRangeReduction()  //光催化还原
//        let filter2 = Luminance()                //黑白 亮度
//        let filter3 = BrightnessAdjustment()     //颜色处理
//        filter3.brightness = 0.8                 //越高越白 白到模糊
//        let filter4 = ExposureAdjustment()       //颜色处理
//        filter4.exposure = 0.8                   //越高越亮

        renderView = RenderView(frame: view.bounds)
        view.addSubview(renderView)
        
        camera.addTarget(filter)
        filter.addTarget(renderView)
        
        camera.startCapture()
        
    }

}

获取本地视频

import UIKit
import AVKit
import GPUImage

class AEEditVideoController: UIViewController {
    
    var videoPath: URL!

    var input: MovieInput!
    var renderView: RenderView!
    
    override func viewDidLoad() {
        super.viewDidLoad()


        setupUI()
    }
    
    private func setupUI() {
        view.backgroundColor = UIColor.black
        title = "编辑视频"
        
        renderView = RenderView(frame: view.frame)
        view.addSubview(renderView)
        renderView.backgroundRenderColor = Color.green

        plye()
    }
    
    deinit {
        print("编辑视频 --- deinit")
    }
    

    func plye() -> Void {
        
        let filter = SepiaToneFilter()

        do {
            let movieURL = videoPath!
            input = try MovieInput(url: movieURL, playAtActualSpeed: true, loop: true)
            
            input --> filter --> renderView
            input.start()
        } catch {
            fatalError("Could not initialize rendering pipeline: \(error)")
        }
    }    
}

但是目前GUPImage2 选取本地视频时 如果视频是用手机拍摄的 默认会旋转180度

由于时间问题 就没怎么研究 直接用的GPUImage 没有用GPUImage2

项目是Swift4.1 下面看效果
swift GPUImage2说明_第4张图片

swift GPUImage2说明_第5张图片

swift GPUImage2说明_第6张图片

大概就是这样了 基本代码

class AERecordingController: UIViewController {
    
    //准备录制
    private var beginTimer: Timer!
    private var beginNumber = 0
    
    //录制时间
    private var recordTimer: Timer!
    private var recordNumber = 0
    
    //准备拍摄
    private var maskView = maskNumberView()
    
    //视频
    private var fileName = "\(Int(Date().timeIntervalSince1970)).m4v"
    private var videoCamera: GPUImageVideoCamera!
    private var movieWriter: GPUImageMovieWriter!
    private var filterImgView: GPUImageView!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.setNavigationBarHidden(true, animated: false)
        view.backgroundColor = UIColor.white
        title = "录制视频"

使用项目时 需在真机上跑 一定要记得设置team
swift GPUImage2说明_第7张图片

你可能感兴趣的:(GPUImage2,Swift,GPUImage)