创建一个纯色的UIImage并在顶部添加文本(Swift)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建一个纯色的UIImage并在顶部添加文本(Swift)相关的知识,希望对你有一定的参考价值。
所以我有一个带UIImage的UICollectionViewCell,我试图让UIImage有一个纯白色的背景,文字覆盖在它上面。我搜索了如何分别完成这些操作,这就是我所拥有的:
使用纯色创建UIImage:
let rect = CGRect(origin: .zero, size: CGSize(width: 1, height: 1))
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
let color = UIColor.white
color.setFill()
UIRectFill(rect)
let whiteImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
然后我用以下函数调用函数textToImage
:
let textImage = textToImage(drawText: "Placeholder text", inImage: whiteImage, atPoint: CGPoint(x: 20.0, y: 20.0))
textToImage
功能是:
func textToImage(drawText text: NSString, inImage image: UIImage, atPoint point: CGPoint) -> UIImage {
let textColor = UIColor.black
let textFont = UIFont(name: "Helvetica Neue", size: 74)
UIGraphicsBeginImageContext(image.size)
let textFontAttributes = [
NSFontAttributeName: textFont,
NSForegroundColorAttributeName: textColor,
] as [String : 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!
}
然后将textImage设置为UICollectionViewCell的UIImage。
textToImage函数适用于普通图像,但如果我尝试先创建一个纯色图像,然后尝试在新创建的图像上调用textToImage,则显示纯色但文本不显示。关于这可能是什么问题的任何建议?谢谢!
一些问题。你的主要是whiteImage
只有1x1分。因此,当您将其传递给textToImage
时,您将创建一个新的1x1图像。在如此小的图像上难以阅读文本。
用更有用的尺寸创建whiteImage
,事情会好得多。
let rect = CGRect(origin: .zero, size: CGSize(width: 600, height: 300)) // pick a useful size
你也应该改变:
UIGraphicsBeginImageContext(image.size)
至:
UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
@rmaddy指出了一些重要的事情,但您是否也考虑过使用UIKit API?在创建之后我不知道你是否需要对图像做任何事情(将它发送到服务器,保存到库等),但是你所描述的内容非常简单,而且性能也非常高(如果您只是将图像视图的背景颜色设置为白色并在其上添加标签,这可能无关紧要,我不知道您的图像有多大。
即使您确实需要捕获该图像并使用它执行某些操作,ios也可以很容易地截取UIView。 Here是相关的链接。
以上是关于创建一个纯色的UIImage并在顶部添加文本(Swift)的主要内容,如果未能解决你的问题,请参考以下文章