สำหรับการเปลี่ยนแปลงสีของภาพ ( เลือก , ภาพคลาสสิก , ภาพ ) การใช้งานที่:
ภาพตัวอย่าง:
สวิฟต์ 2
public extension UIImage {
public func tintPhoto(tintColor: UIColor) -> UIImage {
return modifiedImage { context, rect in
CGContextSetBlendMode(context, .Normal)
UIColor.blackColor().setFill()
CGContextFillRect(context, rect)
CGContextSetBlendMode(context, .Normal)
CGContextDrawImage(context, rect, self.CGImage)
CGContextSetBlendMode(context, .Color)
tintColor.setFill()
CGContextFillRect(context, rect)
CGContextSetBlendMode(context, .DestinationIn)
CGContextDrawImage(context, rect, self.CGImage)
}
}
public func tintPicto(fillColor: UIColor) -> UIImage {
return modifiedImage { context, rect in
CGContextSetBlendMode(context, .Normal)
fillColor.setFill()
CGContextFillRect(context, rect)
CGContextSetBlendMode(context, .DestinationIn)
CGContextDrawImage(context, rect, self.CGImage)
}
}
private func modifiedImage(@noescape draw: (CGContext, CGRect) -> ()) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, scale)
let context: CGContext! = UIGraphicsGetCurrentContext()
assert(context != nil)
CGContextTranslateCTM(context, 0, size.height);
CGContextScaleCTM(context, 1.0, -1.0);
let rect = CGRectMake(0.0, 0.0, size.width, size.height)
draw(context, rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
UPD
สวิฟต์ 3
extension UIImage {
func tintPhoto(_ tintColor: UIColor) -> UIImage {
return modifiedImage { context, rect in
context.setBlendMode(.normal)
UIColor.black.setFill()
context.fill(rect)
context.setBlendMode(.normal)
context.draw(cgImage!, in: rect)
context.setBlendMode(.color)
tintColor.setFill()
context.fill(rect)
context.setBlendMode(.destinationIn)
context.draw(context.makeImage()!, in: rect)
}
}
func tintPicto(_ fillColor: UIColor) -> UIImage {
return modifiedImage { context, rect in
context.setBlendMode(.normal)
fillColor.setFill()
context.fill(rect)
context.setBlendMode(.destinationIn)
context.draw(cgImage!, in: rect)
}
}
fileprivate func modifiedImage(_ draw: (CGContext, CGRect) -> ()) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, scale)
let context: CGContext! = UIGraphicsGetCurrentContext()
assert(context != nil)
context.translateBy(x: 0, y: size.height)
context.scaleBy(x: 1.0, y: -1.0)
let rect = CGRect(x: 0.0, y: 0.0, width: size.width, height: size.height)
draw(context, rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
}