内置Core Image过滤器的最新列表?

时间:2018-10-24 08:28:18

标签: ios macos core-image cifilter

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

Looks like,它的上一次更新是在2016年。此后,2017年和2018年的WWDC视频宣布了其他过滤器(实际上,此页面上没有出现)。

有人知道最新的内置Core Image过滤器列表吗?

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

2 个答案:

答案 0 :(得分: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的自定义过滤器。

答案 1 :(得分:1)

我创建了一个website called CIFilter.io,其中列出了所有内置的CIFilters和一个companion app,您可以根据需要尝试使用它们{@ 3}。这应该具有所有最新的CIFilter信息-我已经为iOS 13更新了它,并打算继续保持更新。

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