Ios 将文本写入透明图像
我想在一个完全透明的图像上写一个文本字符串(alpha0无处不在),但它不起作用。如果背景图像的alpha为0,则图像的背景将变为白色。以下是我尝试过的方法: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
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保存到照片库中,它可以正常工作-