func getWaterMark(_ originalImage: UIImage?, title: String, andMark markFont: UIFont, andMark markColor: UIColor) -> UIImage? {
let HORIZONTAL_SPACE: CGFloat = 30
let VERTICAL_SPACE: CGFloat = 50
var font: UIFont? = markFont
if font == nil {
font = UIFont.systemFont(ofSize: 23)
}
var color: UIColor? = markColor
if color == nil {
color = UIColor.blue
}
//原始image的寬高
guard let viewWidth = originalImage?.size.width, let viewHeight = originalImage?.size.height else { return nil }
//為了防止圖片失真,繪制區(qū)域?qū)捀吆驮紙D片寬高一樣
UIGraphicsBeginImageContext(CGSize(width: viewWidth, height: viewHeight))
//先將原始image繪制上
originalImage?.draw(in: CGRect(x: 0, y: 0, width: viewWidth, height: viewHeight))
//sqrtLength:原始image的對角線length。在水印旋轉(zhuǎn)矩陣中只要矩陣的寬高是原始image的對角線長度,無論旋轉(zhuǎn)多少度都不會有空白。
let sqrtLength = sqrt(viewWidth * viewWidth + viewHeight * viewHeight)
let attrStr = NSAttributedString(string: title, attributes: [NSAttributedString.Key.foregroundColor : markColor, NSAttributedString.Key.font: markFont])
//繪制文字的寬高
let strWidth = attrStr.size().width
let strHeight = attrStr.size().height
//開始旋轉(zhuǎn)上下文矩陣,繪制水印文字
let context = UIGraphicsGetCurrentContext()
//將繪制原點(0,0)調(diào)整到源image的中心
context?.concatenate(CGAffineTransform(translationX: viewWidth / 2, y: viewHeight / 2))
//以繪制原點為中心旋轉(zhuǎn)
context?.concatenate(CGAffineTransform(rotationAngle: CGFloat(M_PI_2 / 3)))
//將繪制原點恢復(fù)初始值,保證當前context中心和源image的中心處在一個點(當前context已經(jīng)旋轉(zhuǎn),所以繪制出的任何layer都是傾斜的)
context?.concatenate(CGAffineTransform(translationX: -viewWidth / 2, y: -viewHeight / 2))
//計算需要繪制的列數(shù)和行數(shù)
let horCount: Int = Int(sqrtLength / CGFloat(strWidth + HORIZONTAL_SPACE)) + 1
let verCount: Int = Int(sqrtLength / CGFloat(strHeight + VERTICAL_SPACE)) + 1
//此處計算出需要繪制水印文字的起始點,由于水印區(qū)域要大于圖片區(qū)域所以起點在原有基礎(chǔ)上移
let orignX: CGFloat = -(sqrtLength - viewWidth) / 2
let orignY: CGFloat = -(sqrtLength - viewHeight) / 2
//在每列繪制時X坐標疊加
var tempOrignX: CGFloat = orignX
//在每行繪制時Y坐標疊加
var tempOrignY: CGFloat = orignY
for i in 0..<horCount * verCount {
title.draw(in: CGRect(x: tempOrignX, y: tempOrignY, width: strWidth, height: strHeight), withAttributes: [NSAttributedString.Key.foregroundColor : markColor, NSAttributedString.Key.font: markFont])
if i % horCount == 0 && i != 0 {
tempOrignX = orignX
tempOrignY += strHeight + VERTICAL_SPACE
} else {
tempOrignX += strWidth + HORIZONTAL_SPACE
}
}
//根據(jù)上下文制作成圖片
let finalImg: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return finalImg
}

效果圖