如何在swift编程中设置UIimage中的背景颜色

问题描述 投票:7回答:6

我使用drawInRect()方法绘制图像。

我的矩形尺寸为120 * 120,我的图像为100 * 100。

如何在swift中为我的图像设置背景颜色?

ios swift uiimage
6个回答
8
投票

您也可以使用此扩展程序:

extension UIImage {

    func imageWithColor(tintColor: UIColor) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)

        let context = UIGraphicsGetCurrentContext() as CGContextRef
        CGContextTranslateCTM(context, 0, self.size.height)
        CGContextScaleCTM(context, 1.0, -1.0);
        CGContextSetBlendMode(context, kCGBlendModeNormal)

        let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect
        CGContextClipToMask(context, rect, self.CGImage)
        tintColor.setFill()
        CGContextFillRect(context, rect)

        let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage
        UIGraphicsEndImageContext()

        return newImage
    }
}

然后

image.imageWithColor("#1A6BAE".UIColor)

6
投票

更新了@ Egghead的Swift 3解决方案

extension UIImage {
   static func imageWithColor(tintColor: UIColor) -> UIImage {
        let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
        UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
        tintColor.setFill()
        UIRectFill(rect)
        let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return image
    }
}

用法:

UIImage.imageWithColor(tintColor: <Custom color>)

4
投票

最好使用UIImageView的backgroundColor属性。你可以这样做 -

self.imageView.backgroundColor = UIColor.redColor()

存在以下预设颜色:

blackColor
darkGrayColor
lightGrayColor
whiteColor
grayColor
redColor
greenColor
blueColor
cyanColor
yellowColor
magentaColor
orangeColor
purpleColor
brownColor
clearColor

如果您想要以编程方式创建具有给定颜色的UIImage,您可以按如下方式执行此操作:

var rect = CGRectMake(0, 0, size.width, size.height)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(rect)
var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

var'图像'是你的彩色UIImage。


3
投票

获取具有扩展名的背景颜色的图像的另一种方法是:(Swift 3)

extension UIImage {

    /**
        Returns an UIImage with a specified background color.
        - parameter color: The color of the background
     */
    convenience init(withBackground color: UIColor) {

        let rect: CGRect = CGRect(x: 0, y: 0, width: 1, height: 1)
        UIGraphicsBeginImageContext(rect.size);
        let context:CGContext = UIGraphicsGetCurrentContext()!;
        context.setFillColor(color.cgColor);
        context.fill(rect)

        let image:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()

        self.init(ciImage: CIImage(image: image)!)

    }
}

然后:

// change UIColor.white with your color
let image = UIImage(withBackground: UIColor.white)

3
投票

斯威夫特4

如果您需要绘制图像的背景,出于优化和装饰目的,您可以以特定方式绘制图像:

UIImage(named: "someImage")?.withBackground(color: .white)


Extension

extension UIImage {
    func withBackground(color: UIColor, opaque: Bool = true) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(size, opaque, scale)

        guard let ctx = UIGraphicsGetCurrentContext() else { return self }
        defer { UIGraphicsEndImageContext() }

        let rect = CGRect(origin: .zero, size: size)
        ctx.setFillColor(color.cgColor)
        ctx.fill(rect)
        ctx.concatenate(CGAffineTransform(a: 1, b: 0, c: 0, d: -1, tx: 0, ty: size.height))
        ctx.draw(cgImage!, in: rect)

        return UIGraphicsGetImageFromCurrentImageContext() ?? self
    }
}

0
投票

基于已经接受的答案的swift 4解决方案:

func imageWithColor(tintColor: UIColor) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)

    let context = UIGraphicsGetCurrentContext() as! CGContext
    context.translateBy(x: 0, y: size.height)
    context.scaleBy(x: 1, y: -1)
    context.setBlendMode(.normal)

    let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height) as CGRect
    context.clip(to: rect, mask: self.cgImage!)
    tintColor.setFill()
    context.fill(rect)
    let newImage = UIGraphicsGetImageFromCurrentImageContext() as! UIImage
    UIGraphicsEndImageContext()

    return newImage
}

用法:

image.imageWithColor("#1A6BAE".UIColor)
© www.soinside.com 2019 - 2024. All rights reserved.