如何使用Swift在现有图像中添加背景色?

时间:2018-06-26 07:09:13

标签: ios swift uiimage core-graphics

我正在尝试将背景颜色添加到现有图像中,但是它不起作用。

以下是我的代码:-

extension UIImage {
   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()

    //self.type(of: init)(ciImage: CIImage(image: image)!)
    return image
  }
}

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)!)

  }
}. 

我是图形学的新手,不知道如何为图像添加背景色。

这是白色图像,橙色是背景颜色。

1 个答案:

答案 0 :(得分:2)

您应该使用背景色和现有图像创建一个新图像。 试试这个。

func getImage(image: UIImage, backgroundColor: UIColor)->UIImage?{

    UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
    backgroundColor.setFill()
    //UIRectFill(CGRect(origin: .zero, size: image.size))
    let rect = CGRect(origin: .zero, size: image.size)
    let path = UIBezierPath(arcCenter: CGPoint(x:rect.midX, y:rect.midY), radius: rect.midX, startAngle: 0, endAngle: 6.28319, clockwise: true)
    path.fill()
    image.draw(at: .zero)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage
}