使用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

对比如下

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)
        }

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

相关阅读更多精彩内容

友情链接更多精彩内容