How can I tint a UIImage with gradient?

后端 未结 4 2052
攒了一身酷
攒了一身酷 2020-12-12 18:37

I searched everywhere but didn\'t find the solution. I have image 1. How can I programatically tint them with gradient to get images 2 and 3? Here are those images:

4条回答
  •  渐次进展
    2020-12-12 18:42

    Swift 4 version.

    import UIKit
    
    extension UIImage {
    
    func tintedWithLinearGradientColors(colorsArr: [CGColor]) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale);
        guard let context = UIGraphicsGetCurrentContext() else {
            return UIImage()
        }
        context.translateBy(x: 0, y: self.size.height)
        context.scaleBy(x: 1, y: -1)
    
        context.setBlendMode(.normal)
        let rect = CGRect.init(x: 0, y: 0, width: size.width, height: size.height)
    
        // Create gradient
        let colors = colorsArr as CFArray
        let space = CGColorSpaceCreateDeviceRGB()
        let gradient = CGGradient(colorsSpace: space, colors: colors, locations: nil)
    
        // Apply gradient
        context.clip(to: rect, mask: self.cgImage!)
        context.drawLinearGradient(gradient!, start: CGPoint(x: 0, y: 0), end: CGPoint(x: 0, y: self.size.height), options: .drawsAfterEndLocation)
        let gradientImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
    
        return gradientImage!
    }
    }
    

提交回复
热议问题