设置 UIImage 颜色

Posted

技术标签:

【中文标题】设置 UIImage 颜色【英文标题】:Set UIImage color 【发布时间】:2020-04-22 23:35:02 【问题描述】:

我在 swift 4 上,我的目标是在代码中更改系统 UIImage 的颜色。我用

声明图像
    let defaultImage = UIImage(systemName: "person.circle.fill")

但是当我改变它的色调时:

 let grayDefaultImage = defaultImage?.withTintColor(.gray)

grayDefaultImage 仍显示标准蓝色。接下来我使用扩展程序

//MARK: -UIImage extension
extension UIImage 

    /// @Todo: this blurs the image for some reason
    func imageWithColor(color: UIColor) -> UIImage 
        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
        color.setFill()

        let context = UIGraphicsGetCurrentContext()
        context?.translateBy(x: 0, y: self.size.height)
        context?.scaleBy(x: 1.0, y: -1.0)
        context?.setBlendMode(CGBlendMode.normal)

        let rect = CGRect(origin: .zero, size: CGSize(width: self.size.width, height: self.size.height))
        context?.clip(to: rect, mask: self.cgImage!)
        context?.fill(rect)

        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return newImage!
    

并且图像以非常“像素化”或“低分辨率”的形式呈现。

【问题讨论】:

【参考方案1】:

withTintColor(_:) 说:The new image uses the same rendering mode as the original image.

所以如果原始图像的渲染模式是.alwaysTemplate,意味着图像会忽略它的颜色信息。您需要将模式设置为.alwaysOriginal:

defaultImage?.withTintColor(.gray, renderingMode: .alwaysOriginal)

【讨论】:

当我这样做时:let defaultImage = UIImage(systemName: "person.circle.fill") defaultImage?.withTintColor(.gray, renderingMode: .alwaysOriginal) friendView.image = defaultImage。图像仍以默认蓝色显示。 @chibro2 withTintColor 不改变defaultImage,你需要使用withTintColor返回值。

以上是关于设置 UIImage 颜色的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3:UIImage 设置为模板图像并更改色调颜色时不显示图像

如何仅为 UIImage 的非白色部分设置色调颜色?

我可以更改 UIButton 上的色调颜色,但不能更改 UIImage

在swift中使用UIColor(patternImage:UIImage(named:“myimage.jpg”))设置背景时如何获取视图的背景颜色或图像

swift:使用协议protocol设置颜色,UIImage的切圆角ImageWithCornerRadius

iPhone:UIImage 背景颜色与 UIView 背景颜色不同