【问题标题】:Create a UIImage with solid color and add text on top (Swift)创建一个纯色的 UIImage 并在顶部添加文本(Swift)
【发布时间】:2017-12-21 11:34:17
【问题描述】:

所以我有一个带有 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,纯色会显示,但文本不会。关于这里可能出现什么问题的任何建议?谢谢!

【问题讨论】:

    标签: swift uiimage uicollectionviewcell


    【解决方案1】:

    几个问题。你的主要是 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)
    

    【讨论】:

      【解决方案2】:

      @rmaddy 指出了一些重要的事情,但是您是否也考虑过为此使用 UIKit API?我不知道您是否需要在创建图像后对图像执行任何操作(将其发送到服务器,将其保存到库等),但您所描述的内容非常简单,而且非常高效(这可能无关紧要,我不知道您的图像有多大),如果您只是将图像视图的背景颜色设置为白色并在其顶部添加标签。

      即使您确实需要捕获该图像并对其进行处理,iOS 也可以很容易地截取 UIView。 Here 的相关链接。

      【讨论】:

        猜你喜欢
        • 2016-07-21
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2015-07-16
        • 1970-01-01
        • 2020-02-12
        • 2010-10-26
        相关资源
        最近更新 更多