MacOS: добавление текстового наложения к изображению в Swift - PullRequest
0 голосов
/ 31 января 2019

Я написал небольшое расширение для UIImage, которое добавляет текст к изображению:

extension UIImage {

    func addTextToImage(textToAdd: String) -> UIImage {
        let textColor = UIColor.white
        let textFont = UIFont(name: "Snell Roundhand", size: 40)!
        let scale = UIScreen.main.scale
        UIGraphicsBeginImageContextWithOptions(self.size, false, scale)

        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.alignment = NSTextAlignment.center

        var textFontAttributes = [
            NSAttributedString.Key.font: textFont,
            NSAttributedString.Key.foregroundColor: textColor,
            NSAttributedString.Key.paragraphStyle: paragraphStyle
            ] as [NSAttributedString.Key : Any]


        self.draw(in: CGRect(origin: CGPoint.zero, size: self.size))
        let textFrame = CGPoint(x: self.size.width/4, y: self.size.height/4)
        let rect = CGRect(origin: textFrame, size: CGSize(width: self.size.width/2, height: self.size.height/2) )
        text.draw(in: rect, withAttributes: textFontAttributes)

        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return newImage!
    }
}

Результат должен выглядеть следующим образом: enter image description here

Теперь я хочу сделать то же самое, чтобы NSImage работал на MacOS.

Есть идеи, как это сделать?

Все похожие вопросы по Stackoverflow либо очень старые, без ответа или в ObjectiveC

1 Ответ

0 голосов
/ 02 февраля 2019

Нашел решение:

extension NSImage {

func addTextToImage(drawText text: String) -> SCNImage {

    let targetImage = NSImage(size: self.size, flipped: false, drawingHandler: {
        (dstRect: CGRect) -> Bool in
        self.draw(in: dstRect)
        let textColor = SCNColor.white
        let textFont = NSFont(name: "Snell Roundhand", size: 36)! //Helvetica Bold
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.alignment = NSTextAlignment.center

        var textFontAttributes = [
            NSAttributedString.Key.font: textFont,
            NSAttributedString.Key.foregroundColor: textColor,
            ] as [NSAttributedString.Key : Any]

        let textOrigin = CGPoint(x: self.size.height/3, y: -self.size.width/4)
        let rect = CGRect(origin: textOrigin, size: self.size)
        text.draw(in: rect, withAttributes: textFontAttributes)
        return true
        })
    return targetImage
}

}

...