美文网首页
CoreImage 分类、滤镜和滤镜参数的获取

CoreImage 分类、滤镜和滤镜参数的获取

作者: zackzheng | 来源:发表于2024-01-11 14:28 被阅读0次

CoreImage 是 iOS 开发中常见的滤镜开发方式。
使用方式简单,参考如下:

import UIKit

extension UIImage {
    
    /// 滤镜
    var testFunc: UIImage? {

        guard let cgImage = self.cgImage else {
            return nil
        }
        let ciImage = CIImage(cgImage: cgImage)

        /// CoreImage 的高斯模糊 CIGaussianBlur 会产生一个空白边缘,radius 越大空白边缘越大
        /// 所以需要 clampedToExtent 和 cropped 处理
        /// https://www.365seal.com/y/YNv9o28lpG.html
        let outputImage = ciImage
//            .clampedToExtent()
            .applyingFilter("CIGaussianBlur",
                            parameters: [kCIInputRadiusKey:5.0])
            /// 叠加多个滤镜
            .applyingFilter("CIPixellate")
//            .cropped(to: ciImage.extent)

        let context = CIContext()
        guard let cgImage = context.createCGImage(outputImage, from: outputImage.extent) else {
            return nil
        }
        let image = UIImage(cgImage: cgImage)
        return image
    }
}

目前有 21 个分类 1243 个滤镜,但是使用时只能传字符串(如 "CIGaussianBlur"),没有类似枚举一样的结构可以查看,使用较为麻烦。

目前包含的分类可以在 CoreImage - CIFilter 文件中找到:

/* Categories */
public let kCICategoryDistortionEffect: String
public let kCICategoryGeometryAdjustment: String
public let kCICategoryCompositeOperation: String
public let kCICategoryHalftoneEffect: String
public let kCICategoryColorAdjustment: String
public let kCICategoryColorEffect: String
public let kCICategoryTransition: String
public let kCICategoryTileEffect: String
public let kCICategoryGenerator: String
@available(iOS 5.0, *)
public let kCICategoryReduction: String
public let kCICategoryGradient: String
public let kCICategoryStylize: String
public let kCICategorySharpen: String
public let kCICategoryBlur: String
public let kCICategoryVideo: String
public let kCICategoryStillImage: String
public let kCICategoryInterlaced: String
public let kCICategoryNonSquarePixels: String
public let kCICategoryHighDynamicRange: String
public let kCICategoryBuiltIn: String
@available(iOS 9.0, *)
public let kCICategoryFilterGenerator: String

而通过 CIFilter.filterNames 可以找到分类对应的滤镜:

let filters = CIFilter.filterNames(inCategory: kCICategoryBlur)
filters.forEach { filterString in
    if let filter = CIFilter(name: filterString) {
        /// do something
    }
}

也可以使用下面方法获取当前内置支持的滤镜:

let filters = CIFilter.filterNames(inCategory: nil)

共 233 个,猜测是不同分类或滤镜在不同设备或操作系统下支持程度不同

最后通过 CIFilter.inputKeys 找到滤镜对应的参数:

let filters = CIFilter.filterNames(inCategory: kCICategoryBlur)
filters.forEach { filterString in
    if let filter = CIFilter(name: filterString) {
        let keys = filter.inputKeys
        /// do something
    }
}

这里获取的 key 还不是最终能使用的格式,如 inputRadius,实际用的是 kCIInputRadiusKey。(首字母改成大写,加上前缀kCI,加上后缀Key)。

可以在 CoreImage - CIFilter 文件中找到对应的。

可以自己写个嵌套枚举,方便列举,但意义不大。

苹果文档有列举了些滤镜的效果:
https://developer.apple.com/library/archive/documentation/GraphicsImaging/Reference/CoreImageFilterReference

相关文章

  • 生成二维码 - (Obj-C)

    这里将通过系统提供的CoreImage滤镜来实现二维码生成在CoreImage中提供了很多分类,不同的分类提供了不...

  • CoreImage滤镜

    先看原图 然后马赛克(心中无码则处处高清)之后的效果 上代码了 再来个多种滤镜组合使用的效果 老规矩,继续代码 多...

  • CoreImage 滤镜

    1、CoreImage介绍 coreImage是IOS5中新加入的一个Objective-c的框架,提供了强大高效...

  • 利用coreImage croppedSampleBuffer

    CoreImage的使用及常见滤镜工具

  • 2019-08-27

    滤镜分类 根据滤镜的功能对滤镜进行了如下分类,方便大家查阅—— 柔化系列效果滤镜 光学系列滤镜 颜色系列滤镜 灰...

  • CoreImage(二)CIFilter滤镜效果使用

    CIFilter滤镜效果使用 CIFilter是使用CoreImage进行滤镜效果的核心类,通过这个类设置(KVC...

  • CoreImage(一)简单介绍

    CoreImage(一)简单介绍 CoreImage框架是iOS处理图像的框架,主要用处可以给图片添加滤镜效果和图...

  • 滤镜之CoreImage

    CoreImage是苹果自带的关于图像处理的框架,不仅可以做滤镜,还可以做人脸识别,我们今天先来简单的了解一下滤镜...

  • CoreImage_滤镜

    使用OpenGLES 下进行渲染

  • FFmpeg滤镜(1)

    FFmpeg滤镜Filter描述格式 1、FFmpeg滤镜Filter的参数排列方式 [输入流或标记名]滤镜参数[...

网友评论

      本文标题:CoreImage 分类、滤镜和滤镜参数的获取

      本文链接:https://www.haomeiwen.com/subject/hyutodtx.html