图片滤镜 之 开源框架 GPUImage
2019-10-08 本文已影响0人
小凡凡520
二、导入方式
pod 'GPUImage'
三、简单使用
- 拉升变形滤镜
let gpupicture = GPUImagePicture(image: UIImage(named: "1.jpg")!)
//创建滤镜
let stretchDistortionFilter = GPUImageStretchDistortionFilter()
//为滤镜赋值
stretchDistortionFilter.center = CGPoint(x: 0.2, y: 0.2)
//将输入源和滤镜绑定
gpupicture?.addTarget(stretchDistortionFilter)
//为原图附上滤镜效果
gpupicture?.processImage()
//滤镜收到原图产生的一个frame,并将它作为自己的当前图像缓存
stretchDistortionFilter.useNextFrameForImageCapture()
//通过滤镜,获取当前的图像
resultImgView.image = stretchDistortionFilter.imageFromCurrentFramebuffer()
- 复合滤镜(GPUImageFilterPipeline)
开发过程中,必然会有多种滤镜复合的需求,例如一个可以变化亮度、对比度、曝光的图像调节程序。但是依照上一个示例,我们每添加一种滤镜,便会代替之前的滤镜效果。如果每次处理的都是上一次的filter导出的UIImage图片的话,又会导致无法恢复到原图样子,导致失真。
let gpupicture = GPUImagePicture(image: UIImage(named: "1.jpg")!)
//卡通描边滤镜
let toonFilter = GPUImageToonFilter()
toonFilter.threshold = 0.1
//拉升变形滤镜
let stretchDistortionFilter = GPUImageStretchDistortionFilter()
stretchDistortionFilter.center = CGPoint(x: 0.5, y: 0.5)
//将滤镜组成数组
let filters = [toonFilter,stretchDistortionFilter]
//通过pipline,将输入源,输出,滤镜,三方绑定
let pipLine = GPUImageFilterPipeline(orderedFilters: filters, input: gpupicture, output: gpuimageView)
//绘制产出最终带有复合滤镜的图像
gpupicture?.processImage()
//获取产出的UIImage图像
//此时调用useNextFrameForImageCapture的可以是任一在数组中的Filter
stretchDistortionFilter.useNextFrameForImageCapture()
resultImgView.image = pipLine?.currentFilteredFrame()