Common tasks related to the ImageProcessor in Kingfisher.
ImageProcessor is used to transform an image (or data) into another image. By supplying a processor to
KingfisherManager when setting the image, it can be applied to the downloaded data. The processed image will then
be sent to the image view and stored in the cache.
// Just without anything
imageView.kf.setImage(with: url)
// It equals to
imageView.kf.setImage(with: url, options: [.processor(DefaultImageProcessor.default)])
The
DefaultImageProcessorconverts downloaded data into a corresponding image object. It supports PNG, JPEG, and GIF formats.
@Row {
@Column(size: 3) {
```swift
// Round corner
RoundCornerImageProcessor(cornerRadius: 20)
```
}
@Column {

}
}
// Round corner
let processor = RoundCornerImageProcessor(cornerRadius: 20)
// Downsampling
let processor = DownsamplingImageProcessor(size: CGSize(width: 100, height: 100))
// Cropping
let processor = CroppingImageProcessor(size: CGSize(width: 100, height: 100), anchor: CGPoint(x: 0.5, y: 0.5))
// Blur
let processor = BlurImageProcessor(blurRadius: 5.0)
// Overlay with a color & fraction
let processor = OverlayImageProcessor(overlay: .red, fraction: 0.7)
// Tint with a color
let processor = TintImageProcessor(tint: .blue)
// Adjust color
let processor = ColorControlsProcessor(brightness: 1.0, contrast: 0.7, saturation: 1.1, inputEV: 0.7)
// Black & White
let processor = BlackWhiteProcessor()
// Blend (iOS)
let processor = BlendImageProcessor(blendMode: .darken, alpha: 1.0, backgroundColor: .lightGray)
// Compositing
let processor = CompositingImageProcessor(compositingOperation: .darken, alpha: 1.0, backgroundColor: .lightGray)
// Use the process in view extension methods.
imageView.kf.setImage(with: url, options: [.processor(processor)])
// First blur the image, then make it round cornered.
let processor = BlurImageProcessor(blurRadius: 4) |> RoundCornerImageProcessor(cornerRadius: 20)
imageView.kf.setImage(with: url, options: [.processor(processor)])
Make a type conforming to ImageProcessor by implementing identifier and process:
important:
ImageProcessor/identifieris used to determine the cache key when this processor is applied. It is your responsibility to keep it the same for processors with the same properties/functionality.
struct MyProcessor: ImageProcessor {
let someValue: Int
var identifier: String { "com.yourdomain.myprocessor-\(someValue)" }
// Convert input data/image to target image and return it.
func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> Image? {
switch item {
case .image(let image):
// A previous processor already converted the image to an image object.
// You can do whatever you want to apply to the image and return the result.
return image
case .data(let data):
// Your own way to convert some data to an image.
return createAnImage(data: data)
}
}
}
Then pass it to the KingfisherWrapper/setImage(with:placeholder:options:completionHandler:)-3ft7a methods:
let processor = MyProcessor(someValue: 10)
let url = URL(string: "https://example.com/my_image.png")
imageView.kf.setImage(with: url, options: [.processor(processor)])
If you have a prepared CIFilter, you can create a processor quickly from it.
struct MyCIFilter: CIImageProcessor {
let identifier = "com.yourdomain.myCIFilter"
let filter = Filter { input in
guard let filter = CIFilter(name: "xxx") else { return nil }
filter.setValue(input, forKey: kCIInputBackgroundImageKey)
return filter.outputImage
}
}