使用GPUImage给图片做滤镜

使用GPUImage可以做给图片加上滤镜,自带了120多种的滤镜

*滤镜文件使用地址:https://github.com/BradLarson/GPUImage

有很多种创建滤镜的方法,如创建一个调解亮度的滤镜

1. 从缓冲区获取滤镜

        let inputImage = UIImage(named: "img_analyse_food")
        //创建一个调节亮度的滤镜
        let fileter = GPUImageBrightnessFilter()
        fileter.brightness = -0.5
        //设置要渲染的区域
        fileter.forceProcessingAtSize((inputImage?.size)!)
        fileter.useNextFrameForImageCapture()

        //获取数据源
        let stillImageSource = GPUImagePicture(image: inputImage)
        //添加滤镜
        stillImageSource.addTarget(fileter)
        //开始渲染
        stillImageSource.processImage()
        //获取渲染后的图片
        let brightnessImage = fileter.imageFromCurrentFramebuffer()

从Framebuffer里面获取滤镜图片的2个方法

    public func imageFromCurrentFramebuffer() -> UIImage!
    public func imageFromCurrentFramebufferWithOrientation(imageOrientation: UIImageOrientation) -> UIImage!

注意:由于默认情况下,GPUImage会复用缓冲区内的过滤器,以节省内存,
当使用这个2个方法之前,需要在processImage前设置useNextFrameForImageCapture

对比如下

使用GPUImage给图片做滤镜_第1张图片
1.png

2.简单创建一个使用在图片上的滤镜

        let stillImageFilter2 = GPUImageSepiaFilter()
        quickFilteredImage = stillImageFilter2.imageByFilteringImage(inputImage)

3.通过读取一个acv文件创建滤镜


        if !NSFileManager.defaultManager().fileExistsAtPath(path) {
         
            path = NSBundle.mainBundle().pathForResource(preName, ofType: "acv")!
            let data = NSData(contentsOfFile: path)
            //读取ACV文件获得滤镜
            let filter = GPUImageToneCurveFilter(ACVData:data)
//            filter.forceProcessingAtSize(image.size)
            filter.useNextFrameForImageCapture()
            item.largeImage = filter.imageByFilteringImage(largeImage)
        }

你可能感兴趣的:(使用GPUImage给图片做滤镜)