改变颜色后的像素化UIImage

时间:2017-04-05 18:04:20

标签: ios swift uiimage

在Swift中使用扩展。更改UIImage的叠加颜色会产生颗粒状/像素化图像。

extension UIImage{
    func tint(color: UIColor) -> UIImage{
        UIGraphicsBeginImageContext(self.size)

        let context = UIGraphicsGetCurrentContext()

        // The below 2 lines, Scaling & Translating doesn't have any affect.
        // I read in some post to add this as fix but it doesn't work

        context!.scaleBy(x: 1.0, y: -1.0)
        context!.translateBy(x: 0.0, y: -self.size.height)

        context!.setBlendMode(.multiply)

        let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
        context!.clip(to: rect, mask: self.cgImage!)

        color.setFill()
        context!.fill(rect)

        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return newImage!
    }
}

我做错了什么?

还有其他/更好的方法吗?

Objective-C中的解决方案也受到欢迎。

1 个答案:

答案 0 :(得分:0)

您可以使用UIGraphicsBeginImageContextWithOptions

此功能允许您传入比例因子以应用于图像作为第三个参数。如果您为此值指定var result = $('#5').which('.abc') => 3 var result = $('#5').which('div') => 5 ,则会自动将其设置为主屏幕的比例(这对视网膜显示非常有用)。

在你的情况下,电话会是

0.0

第二个参数指定是否应忽略图像的alpha通道。