Swift version: 5.2
Core Image has a number of interesting filters baked in, and an easy one to use is CIPixellate
– it pixellates images, making them appear blocky. You have control over how big each pixel block should be, so it’s suitable for a range of tasks.
Below is some sample code to get you started. To use it you should:
yourUIImage
to be whatever input UIImage
you want to use.print(processedImage.size)
line at the end for something more interesting – maybe you want to display the pixellated image somewhere?Here’s the code:
guard let currentCGImage = yourUIImage.cgImage else { return }
let currentCIImage = CIImage(cgImage: currentCGImage)
let filter = CIFilter(name: "CIPixellate")
filter?.setValue(currentCIImage, forKey: kCIInputImageKey)
filter?.setValue(12, forKey: kCIInputScaleKey)
guard let outputImage = filter?.outputImage else { return }
let context = CIContext()
if let cgimg = context.createCGImage(outputImage, from: outputImage.extent) {
let processedImage = UIImage(cgImage: cgimg)
print(processedImage.size)
}
Note: if you intend to run pixellation several times you’ll find it more efficient to save your CIContext
rather than keep recreating it.
SPONSORED From January 26th to 31st you can join a FREE crash course for iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a senior developer!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 8.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.