How can I color a UIImage in Swift? How can I color a UIImage in Swift? ios ios

How can I color a UIImage in Swift?


Swift 4 and 5

extension UIImageView {  func setImageColor(color: UIColor) {    let templateImage = self.image?.withRenderingMode(.alwaysTemplate)    self.image = templateImage    self.tintColor = color  }}

Call like this:

let imageView = UIImageView(image: UIImage(named: "your_image_name"))imageView.setImageColor(color: UIColor.purple)

Alternativ For Swift 3, 4 or 5

extension UIImage {    func maskWithColor(color: UIColor) -> UIImage? {        let maskImage = cgImage!        let width = size.width        let height = size.height        let bounds = CGRect(x: 0, y: 0, width: width, height: height)        let colorSpace = CGColorSpaceCreateDeviceRGB()        let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)        let context = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)!        context.clip(to: bounds, mask: maskImage)        context.setFillColor(color.cgColor)        context.fill(bounds)        if let cgImage = context.makeImage() {            let coloredImage = UIImage(cgImage: cgImage)            return coloredImage        } else {            return nil        }    }}

For Swift 2.3

extension UIImage {func maskWithColor(color: UIColor) -> UIImage? {    let maskImage = self.CGImage    let width = self.size.width    let height = self.size.height    let bounds = CGRectMake(0, 0, width, height)    let colorSpace = CGColorSpaceCreateDeviceRGB()    let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue)    let bitmapContext = CGBitmapContextCreate(nil, Int(width), Int(height), 8, 0, colorSpace, bitmapInfo.rawValue) //needs rawValue of bitmapInfo    CGContextClipToMask(bitmapContext, bounds, maskImage)    CGContextSetFillColorWithColor(bitmapContext, color.CGColor)    CGContextFillRect(bitmapContext, bounds)    //is it nil?    if let cImage = CGBitmapContextCreateImage(bitmapContext) {        let coloredImage = UIImage(CGImage: cImage)        return coloredImage    } else {        return nil    }  }}

Call like this:

let image = UIImage(named: "your_image_name")testImage.image =  image?.maskWithColor(color: UIColor.blue)


There's a built in method to obtain a UIImage that is automatically rendered in template mode. This uses a view's tintColor to color the image:

let templateImage = originalImage.imageWithRenderingMode(UIImageRenderingModeAlwaysTemplate)myImageView.image = templateImagemyImageView.tintColor = UIColor.orangeColor()


First you have to change the rendering property of the image to "Template Image" in the .xcassets folder.You can then just change the tint color property of the instance of your UIImageView like so:

imageView.tintColor = UIColor.whiteColor()

enter image description here