【问题标题】:Up-to-date list of built-in Core Image filters?内置核心图像过滤器的最新列表?
【发布时间】:2019-03-28 14:08:23
【问题描述】:

Apple 的Core Image Filter Reference,描述了所有内置的CIFilters,被标记为“不再更新”。

Looks like 最后一次更新是在 2016 年。从那时起,2017 年和 2018 年的 WWDC 视频宣布了额外的过滤器(实际上,这些过滤器并没有出现在此页面上)。

有人知道最新的内置核心图像过滤器列表吗?

(在Apple Dev Forum上也有人问过这个问题,但到目前为止还没有回答。)

【问题讨论】:

  • AFAIK,唯一可靠的找出方法是查询可用的过滤器及其参数,如此处所述 - developer.apple.com/library/archive/documentation/…
  • 谢谢,@MaximVolgin。当然,总比没有好 - 尽管以前的文字描述和说明性图像非常有用。
  • 我已经离线几天了,刚刚赶上。我有一个应用程序可以实际检查 iOS 设备上是否存在特定过滤器(我从未在 macOS 上尝试过,但它是 CoreImage 查询,而不是 OS 查询。它基于我发现用 Swift 2 编写的东西(我的是 Swift 4). 您可以获得属性的名称、属性、最大/最小/默认值...几乎所有内容是一个过滤器描述。这个查询的输出是一个字典,所以你'要么翻过转储,要么修改代码供你使用。如果你需要,我会尝试在第二天发布。
  • 听起来很有帮助,@dfd!

标签: ios macos core-image cifilter


【解决方案1】:

我创建了一个website called CIFilter.io,其中列出了所有内置的 CIFilters 和一个 companion app,如果您愿意,可以使用它来尝试过滤器。这应该包含所有最新的 CIFilter 信息 - 我已针对 iOS 13 对其进行了更新,并打算继续保持更新。

有关该项目的更多信息,请访问in this blog post

【讨论】:

    【解决方案2】:

    我创建了一个小项目来查询 iOS 设备并 (1) 列出所有可用的过滤器并 (2) 列出有关每个输入属性的所有内容。这个项目可以在here找到。

    相关代码:

    var ciFilterList = CIFilter.filterNames(inCategories: nil)
    

    这一行创建了一个包含所有可用过滤器的[String]。如果您只希望使用“CICategoryBlur”类别的所有可用过滤器,请将nil 替换为它。

    print("=======")
    print("List of available filters")
    print("-------")
    for ciFilterName in ciFilterList {
        print(ciFilterName)
    }
    print("-------")
    print("Total: " + String(ciFilterList.count))
    

    相当不言自明。当我在运行 iOS 12.0.1 的 iPad mini 上运行它时,列出了 207 个过滤器。注意:我从未在 macOS 上尝试过,但由于它确实不使用UIKit,我相信它会起作用。

    let filterName = "CIZoomBlur"
    let filter = CIFilter(name: filterName)
    print("=======")
    print("Filter Name: " + filterName)
    let inputKeys = filter?.inputKeys
    if inputKeys?.count == 0 {
       print("-------")
       print("No input attributes.")
    } else {
       for inputKey in inputKeys! {
           print("-------")
           print("Input Key: " + inputKey)
           if  let attribute = filter?.attributes[inputKey] as? [String: AnyObject],
               let attributeClass = attribute[kCIAttributeClass] as? String,
               let attributeDisplayName = attribute["CIAttributeDisplayName"] as? String,
               let attributeDescription = attribute[kCIAttributeDescription] as? String {
                   print("Display name: " + attributeDisplayName)
                   print("Description: " + attributeDescription)
                   print("Attrbute type: " + attributeClass)
                   switch attributeClass {
                   case "NSNumber":
                       let minimumValue = (attribute[kCIAttributeSliderMin] as! NSNumber).floatValue
                       let maximumValue = (attribute[kCIAttributeSliderMax] as! NSNumber).floatValue
                       let defaultValue = (attribute[kCIAttributeDefault] as! NSNumber).floatValue
                       print("Default value: " + String(defaultValue))
                       print("Minimum value: " + String(minimumValue))
                       print("Maximum value: " + String(maximumValue))
                   case "CIColor":
                       let defaultValue = attribute[kCIAttributeDefault] as! CIColor
                       print(defaultValue)
                   case "CIVector":
                       let defaultValue = attribute[kCIAttributeDefault] as! CIVector
                       print(defaultValue)
                   default:
                       // if you wish, just dump the variable attribute to look at everything!
                       print("No code to parse an attribute of type: " + attributeClass)
                       break
                   }
               }
           }
       }
    }
    print("=======")
    

    再次,相当不言自明。我正在编写的应用程序仅适用于使用单个 CIImage 的过滤器,并且属性限制为 NSNumberCIColorCIVector,所以事情属于默认部分switch 声明。但是,它应该让你开始!如果您想查看“原始”版本,只需查看 attribute 变量即可。

    最后,我推荐一下由 Simon Gladman 开发的名为 Filterpedia 的东西。它是一款 iPad 应用程序(仅限横向),可让您尝试几乎所有可用的过滤器以及所有具有默认/最大值/最小值的属性。不过要注意两件事。 (1) 它是用 Swift 2 编写的,但它是一个 Swift 4 fork here。 (2) 还有很多使用自定义CIKernels的自定义过滤器。

    【讨论】:

    • 谢谢,@dfd!我也会给 FIlterpedia 一个旋转。
    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    相关资源
    最近更新 更多