Как добавить цвет фона в существующее изображение с помощью Swift? - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь добавить цвет фона к существующему изображению, но он не работает.

Вот мой код: -

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 голосов
/ 26 июня 2018

Вы должны создать новое изображение с цветом фона и существующим изображением.попробуйте это.

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
}
...