ios - 将文本写入透明 UIImage
问题描述
我想在完全透明的图像上写一个文本字符串(到处都是 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)
}
无论我做什么,背景都是白色的。
解决方案
推荐阅读
- c# - 如何将 Outlook.MailItem 附件转换为输入流?
- html - 大量收藏时优化单选按钮
- chibi-scheme - chibi-scheme 嵌入:从 C 调用具有多个参数的方案函数
- docker - CentOS7:如何在 docker 容器中启动 slapd 服务?
- javascript - 如何使此循环仅在未找到所有匹配项时仅写入第二个
- r - 如何将多个子文件夹中的多个 fasta 文件导入列表列表
- javascript - 扫描线填充 - 如何确保覆盖整个多边形?
- c# - Powershell 尝试从使用“System.Runtime.Serialization.Json”的 cs 文件添加类型失败
- java - 更改属性文件的名称导致找不到它
- spring - Spring Data JPA 将动态列名作为参数传递给查询