ios - 将文字写入透明的UIImage

标签 ios swift uiimage uikit core-graphics

我想在完全透明的图像(到处都是alpha 0)上写一个文本字符串,但是它不起作用。如果背景图片的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)
}
不管我做什么,背景都是白色的。

最佳答案

尝试转换为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)
        }
    }
}

关于ios - 将文字写入透明的UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63593222/

相关文章:

ios - 提高 captureStillImageAsynchronouslyFromConnection 的速度

ios - 向图层添加 CAAnimation 时, "forKey"参数的用途是什么?

ios - 如何模仿股票后退按钮

处理设备照片时 iOS ImageView 裁剪不起作用

javascript - 带有解析的 iOS HTML InnerText

ios - AVAudioEngine AudioFile 时间管理

swift - 使用计数器变量隐藏许多标签

ios - 为什么从 FileManager 数据初始化的 UIImages 有错误的比例?

ios - 优化一组 UIImages

ios - 我怎样才能让 1 viewcontroller 从底部向上滑动