圖片加水印

  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
    }
效果圖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容