创建一个纯色的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)的主要内容,如果未能解决你的问题,请参考以下文章

在纯色背景上添加透明渐变

代码创建的圆形纯色图像模糊

CALayer - 如何创建具有纯色背景和透明文本的图像?

以编程方式在 xib 上使用自动布局创建的两个文本字段之间添加 uiview

带有颜色和居中文本的 UIImage

Android:如何在布局中放置纯色矩形?