Reputation: 2257
Apple's Core Image Filter Reference
, which describes all of the built-in CIFilter
s, is marked as "no longer being updated".
Looks like it was last updated in 2016. Since then, WWDC videos for 2017 and 2018 have announced additional filters (which, indeed, don't appear on this page).
Does anybody know of a more up-to-date list of built-in Core Image filters?
(Question has also been asked, but so far not answered, on the Apple Dev Forum.)
Upvotes: 2
Views: 1771
Reputation: 1389
I've created a website called CIFilter.app which lists all the built-in CIFilters and a companion app which you can use to try the filters out if you like. This should have all the up to date CIFilter information - I've updated it for iOS 13 and intend to continue to keep it updated.
More info about the project is available in this blog post.
As of the last time these were generated (~2022) here's the list:
CIBokehBlur
CIBoxBlur
CIDepthBlurEffect
CIDiscBlur
CIGaussianBlur
CIMaskedVariableBlur
CIMedianFilter
CIMorphologyGradient
CIMorphologyMaximum
CIMorphologyMinimum
CIMorphologyRectangleMaximum
CIMorphologyRectangleMinimum
CIMotionBlur
CINoiseReduction
CIZoomBlur
CIColorAbsoluteDifference
CIColorClamp
CIColorControls
CIColorMatrix
CIColorPolynomial
CIColorThreshold
CIColorThresholdOtsu
CIDepthToDisparity
CIDisparityToDepth
CIExposureAdjust
CIGammaAdjust
CIHueAdjust
CILinearToSRGBToneCurve
CISRGBToneCurveToLinear
CITemperatureAndTint
CIToneCurve
CIVibrance
CIWhitePointAdjust
CIColorCrossPolynomial
CIColorCube
CIColorCubeWithColorSpace
CIColorCubesMixedWithMask
CIColorCurves
CIColorInvert
CIColorMap
CIColorMonochrome
CIColorPosterize
CIDither
CIDocumentEnhancer
CIFalseColor
CILabDeltaE
CIMaskToAlpha
CIMaximumComponent
CIMinimumComponent
CIPaletteCentroid
CIPalettize
CIPhotoEffectChrome
CIPhotoEffectFade
CIPhotoEffectInstant
CIPhotoEffectMono
CIPhotoEffectNoir
CIPhotoEffectProcess
CIPhotoEffectTonal
CIPhotoEffectTransfer
CISepiaTone
CIThermal
CIVignette
CIVignetteEffect
CIXRay
CIAdditionCompositing
CIColorBlendMode
CIColorBurnBlendMode
CIColorDodgeBlendMode
CIDarkenBlendMode
CIDifferenceBlendMode
CIDivideBlendMode
CIExclusionBlendMode
CIHardLightBlendMode
CIHueBlendMode
CILightenBlendMode
CILinearBurnBlendMode
CILinearDodgeBlendMode
CILuminosityBlendMode
CIMaximumCompositing
CIMinimumCompositing
CIMultiplyBlendMode
CIMultiplyCompositing
CIOverlayBlendMode
CIPinLightBlendMode
CISaturationBlendMode
CIScreenBlendMode
CISoftLightBlendMode
CISourceAtopCompositing
CISourceInCompositing
CISourceOutCompositing
CISourceOverCompositing
CISubtractBlendMode
CIBumpDistortion
CIBumpDistortionLinear
CICameraCalibrationLensCorrection
CICircleSplashDistortion
CICircularWrap
CIDisplacementDistortion
CIDroste
CIGlassDistortion
CIGlassLozenge
CIHoleDistortion
CILightTunnel
CINinePartStretched
CINinePartTiled
CIPinchDistortion
CIStretchCrop
CITorusLensDistortion
CITwirlDistortion
CIVortexDistortion
CIAttributedTextImageGenerator
CIAztecCodeGenerator
CIBarcodeGenerator
CICheckerboardGenerator
CICode128BarcodeGenerator
CIConstantColorGenerator
CILenticularHaloGenerator
CIMeshGenerator
CIPDF417BarcodeGenerator
CIQRCodeGenerator
CIRandomGenerator
CIRoundedRectangleGenerator
CIStarShineGenerator
CIStripesGenerator
CISunbeamsGenerator
CITextImageGenerator
CIAffineTransform
CIBicubicScaleTransform
CICrop
CIEdgePreserveUpsampleFilter
CIKeystoneCorrectionCombined
CIKeystoneCorrectionHorizontal
CIKeystoneCorrectionVertical
CILanczosScaleTransform
CIPerspectiveCorrection
CIPerspectiveRotate
CIPerspectiveTransform
CIPerspectiveTransformWithExtent
CIStraightenFilter
CIGaussianGradient
CIHueSaturationValueGradient
CILinearGradient
CIRadialGradient
CISmoothLinearGradient
CICMYKHalftone
CICircularScreen
CIDotScreen
CIHatchedScreen
CILineScreen
CIAreaAverage
CIAreaHistogram
CIAreaMaximum
CIAreaMaximumAlpha
CIAreaMinMax
CIAreaMinMaxRed
CIAreaMinimum
CIAreaMinimumAlpha
CIColumnAverage
CIHistogramDisplayFilter
CIKMeans
CIRowAverage
CISharpenLuminance
CIUnsharpMask
CIBlendWithAlphaMask
CIBlendWithBlueMask
CIBlendWithMask
CIBlendWithRedMask
CIBloom
CIComicEffect
CIConvolution3X3
CIConvolution5X5
CIConvolution7X7
CIConvolution9Horizontal
CIConvolution9Vertical
CICoreMLModelFilter
CICrystallize
CIDepthOfField
CIEdgeWork
CIEdges
CIGaborGradients
CIGloom
CIHeightFieldFromMask
CIHexagonalPixellate
CIHighlightShadowAdjust
CILineOverlay
CIMix
CIPixellate
CIPointillize
CISaliencyMapFilter
CISampleNearest
CIShadedMaterial
CISpotColor
CISpotLight
CIAffineClamp
CIAffineTile
CIClamp
CIEightfoldReflectedTile
CIFourfoldReflectedTile
CIFourfoldRotatedTile
CIFourfoldTranslatedTile
CIGlideReflectedTile
CIKaleidoscope
CIOpTile
CIParallelogramTile
CIPerspectiveTile
CISixfoldReflectedTile
CISixfoldRotatedTile
CITriangleKaleidoscope
CITriangleTile
CITwelvefoldReflectedTile
CIAccordionFoldTransition
CIBarsSwipeTransition
CICopyMachineTransition
CIDisintegrateWithMaskTransition
CIDissolveTransition
CIFlashTransition
CIModTransition
CIPageCurlTransition
CIPageCurlWithShadowTransition
CIRippleTransition
CISwipeTransition
CIGuidedFilter
Upvotes: 8
Reputation:
I created a small project to query an iOS device and (1) list out all available filters and (2) list everything about each input attributes. This project can be found here.
The relevant code:
var ciFilterList = CIFilter.filterNames(inCategories: nil)
This line creates a [String]
of all available filters. If you only wish for all available filters of category "CICategoryBlur", replace the nil
with it.
print("=======")
print("List of available filters")
print("-------")
for ciFilterName in ciFilterList {
print(ciFilterName)
}
print("-------")
print("Total: " + String(ciFilterList.count))
Pretty self-explanatory. When I ran this on an iPad mini running iOS 12.0.1, 207 filters were listed. NOTE: I have never tried this on macOS, but since it really doesn't use UIKit
I believe it will work.
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("=======")
Again, fairly self-explanatory. The app I'm writing only works with filters using a single CIImage
and with attributes restricted to NSNumber
, CIColor
, and CIVector
, so things will fall to the default part of the switch
statement. However, it should get you started! If you wish to see the "raw" version, jut look at the attribute
variable.
Finally, I'd recommend something developed by Simon Gladman called Filterpedia. It's an iPad app (restricted to landscape) that allows you to experiment with pretty much all available filters along with all attributes with default/max/min values. Be aware of two things though. (1) It's written in Swift 2, but the is a Swift 4 fork here. (2) There are also numerous custom filters using custom CIKernels
.
Upvotes: 5