一、框架介绍
a)是一个图片框架,它基于OpenGL顶层创建,底层则用着色器来处理图像
b)他利用了GPU基于硬件加速来处理图像
c)CoreImage中有很多滤镜
d)它们能够一次给予一张图像或者视频帧多种视觉效果 -> 滤镜链
e)而且滤镜可以连接起来组成一个滤镜链 把滤镜效果叠加起来处理图像
二、背景
CoreImage是iOS5新加入的一个图像处理框架, 提供了强大高效的图像处理功能, 用来对基于像素的图像进行操作与分析
内置了很多强大的滤镜(Filter), 这些Filter提供了各种各样的效果, 并且还可以通过滤镜链将各种效果的Filter叠加起来形成强大的自定义效果
- 图片色彩滤镜处理
- 图片高斯模糊滤镜处理
/**
* 图片高斯模糊滤镜处理
*
* @param inputImage 原始需要处理的图片
* @param radius 迷糊值(默认为 10)
*
* @return UIImage
*/
fileprivate func imageGaussianBlurFilterWithImage(inputImage:UIImage,radius:Float) ->UIImage? {
// 网络图片
CIImage(contentsOf: URL(string: "xxxx") ?? URL(fileURLWithPath: ""))
var outputImage = inputImage
//创建上下文
let context = CIContext(options: nil)
//创建滤镜(高斯模糊)
let filter = CIFilter(name: "CIGaussianBlur")
guard let cgImage = inputImage.cgImage else {
return nil
}
//创建过滤源图片
var image = CIImage(cgImage: cgImage)
filter?.setValue(image, forKey: kCIInputImageKey)
//设置过滤参数
filter?.setValue(NSNumber(value: radius), forKey: "inputRadius")
//取得输出图片显示或保存
guard let ciImg = filter?.value(forKey: kCIOutputImageKey) as? CIImage else {
return nil
}
image = ciImg
guard let temp = context.createCGImage(image, from: image.extent) else {
return nil
}
outputImage = UIImage(cgImage: temp)
return outputImage
}
- 调整图片内容的颜色
guard let cgImage = UIImage(named: "1.jpg")?.cgImage else {
return
}
// 原图
let inputImage = CIImage(cgImage: cgImage)
for i in CIFilter.filterNames(inCategory: kCICategoryDistortionEffect) {
// 查询效果
print(i)
}
/*
1.查询 效果分类中 包含什么效果:filterNamesInCategory:
2.查询 使用的效果中 可以设置什么属性(KVC) attributes
使用步骤
1.需要添加滤镜的源图
2.初始化一个滤镜 设置滤镜(根据查询到的属性来设置)
3.把滤镜 输出的图像 和滤镜 合并 CIContext -> 得到一个合成之后的图像
4.展示
*/
let filter = CIFilter(name: "CIColorMonochrome")
for i in (filter?.attributes ?? [:]) {
// 查询属性
print(i)
}
//这个属性是必须赋值的,假如你处理的是图片的话
filter?.setValue(inputImage, forKey: kCIInputImageKey)
// 通过改变颜色值,调整想要的颜色
let color = CIColor(red: 0.759, green: 1, blue: 0.592, alpha: 1)
filter?.setValue(color, forKey: kCIInputColorKey)
//CIContext
let context = CIContext(options: nil)
guard let outPutImage = filter?.outputImage else {
return
}
guard let image = context.createCGImage(outPutImage, from: outPutImage.extent) else {
return
}
resultImgView.image = UIImage(cgImage: image)
- 改变hud (饱和度)
guard let cgImage = UIImage(named: "1.jpg")?.cgImage else {
return
}
// 原图
let imgSource = CIImage(cgImage: cgImage)
//创建基于GPU的CIContext对象实例
let context = CIContext(options: nil)
//创建滤镜
let filterHueAdjust = CIFilter(name: "CIHueAdjust")
//设置过滤器参数
filterHueAdjust?.setValue(imgSource, forKey: kCIInputImageKey)
filterHueAdjust?.setValue(NSNumber(value: 0.5), forKey: "inputAngle")
//得到过滤后的图片
guard let imgOutput = filterHueAdjust?.outputImage else {
return
}
//转换图片
guard let imgRef = context.createCGImage(imgOutput, from: imgOutput.extent) else {
return
}
let imgNew = UIImage(cgImage: imgRef)
resultImgView.image = imgNew
网友评论