Ios 将文本写入透明图像

Ios 将文本写入透明图像,ios,swift,uiimage,uikit,core-graphics,Ios,Swift,Uiimage,Uikit,Core Graphics,我想在一个完全透明的图像上写一个文本字符串(alpha0无处不在),但它不起作用。如果背景图像的alpha为0,则图像的背景将变为白色。以下是我尝试过的方法: extension UIColor { func image(_ size: CGSize = CGSize(width: 1, height: 1)) -> UIImage { return UIGraphicsImageRenderer(size: size).image { rendererContext in

我想在一个完全透明的图像上写一个文本字符串(alpha0无处不在),但它不起作用。如果背景图像的alpha为0,则图像的背景将变为白色。以下是我尝试过的方法:

extension UIColor {
  func image(_ size: CGSize = CGSize(width: 1, height: 1)) -> UIImage {
      return UIGraphicsImageRenderer(size: size).image { rendererContext in
          self.setFill()
          rendererContext.fill(CGRect(origin: .zero, size: size))
      }
  }
}


 func textToImage(drawText text: String, inImage image: UIImage, atPoint point: CGPoint) -> UIImage {
    let textColor = UIColor.blue
    let textFont = UIFont(name: "Helvetica Bold", size: 40)!

    let scale = UIScreen.main.scale
    UIGraphicsBeginImageContextWithOptions(image.size, false, scale)

    let textFontAttributes = [
        NSAttributedString.Key.font: textFont,
        NSAttributedString.Key.foregroundColor: textColor,
        ] as [NSAttributedString.Key : Any]
    image.draw(in: CGRect(origin: CGPoint.zero, size: image.size))

    let rect = CGRect(origin: point, size: image.size)
    text.draw(in: rect, withAttributes: textFontAttributes)

    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage!
}
然后:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    
    let inImage = UIColor.black.withAlphaComponent(0).image(CGSize(width: 800, height: 800))
     //Even tried inImage = UIImage(named: "Transparent") where Transparent.png is fully transparent image! // 

    let image = textToImage(drawText: "Test String", inImage: inImage, atPoint: CGPoint(x: 0, y: 0))
    
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
无论我做什么,背景都是白色的。

我已经在playgroung中测试了您的代码,并且它可以正常工作

因此,原因是苹果画廊的阿尔法通道表示。看起来它不受支持

请尝试转换为png

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    let inImage = UIColor.black.withAlphaComponent(0).image(CGSize(width: 800, height: 800))
     //Even tried inImage = UIImage(named: "Transparent") where Transparent.png is fully transparent image! //

    let image = textToImage(drawText: "Test String", inImage: inImage, atPoint: CGPoint(x: 0, y: 0))

    self.image.image = image


    if let pngdata = image.pngData() {
        if let newImage = UIImage(data: pngdata) {
            UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil)
        }
    }
}

对我来说,你的代码工作得很好,也许你正在保存为jpeg而不是png,png支持alpha通道?好的,结果是UIImageWriteToSavedPhotosAlbum没有将带有完整alpha的图像保存到照片库,因为默认情况下它是jpeg格式的。在UIImageView和works上试用过!好的,按照下面的代码将png保存到照片库中,它可以正常工作-