Swift UIImage添加傾斜水印

首先上效果:

Simulator Screen Shot - iPhone 11 - 2020-07-31 at 14.02.09.png

代碼

// 添加水印
extension UIImage {
    func addWaterText(viewSize: CGSize, text: String, color: UIColor = .lightGray, font: UIFont = .systemFont(ofSize: 13)) -> UIImage? {
        let scale = self.size.width/viewSize.width
        // 計算text渲染大小
        let sizeFont = UIFont.systemFont(ofSize: scale * font.pointSize)
        
        // 計算text size width:.greatestFiniteMagnitude height:.greatestFiniteMagnitude
        let textSize = text.hs_sizeWithConstrainedWidth(.greatestFiniteMagnitude, font: sizeFont)
        //原始image的寬高
        let viewWidth = self.size.width
        let viewHeight = self.size.height
        
        //進行尺寸重繪 為了防止圖片失真睦优,繪制區(qū)域?qū)捀吆驮紙D片寬高一樣
        UIGraphicsBeginImageContext(self.size)
        self.draw(in: CGRect.init(x: 0, y: 0, width: viewWidth, height: viewHeight))
        //sqrtLength:原始image的對角線length据沈。在水印旋轉(zhuǎn)矩陣中只要矩陣的寬高是原始image的對角線長度腥泥,無論旋轉(zhuǎn)多少度都不會有空白简识。
        let sqrtLength = CGFloat(sqrt(Double(viewWidth*viewWidth + viewHeight*viewHeight)))
        let attr = [NSAttributedString.Key.font: sizeFont, NSAttributedString.Key.foregroundColor: color]
        let attrStr = NSAttributedString.init(string: text, attributes: attr)
        //繪制文字的寬高
        let strWidth = textSize.width
        let strHeight = textSize.height
        
        //開始旋轉(zhuǎn)上下文矩陣,繪制水印文字
        let context = UIGraphicsGetCurrentContext()
        context?.translateBy(x: CGFloat(viewWidth/2), y: CGFloat(viewHeight/2))
        context?.rotate(by: CGFloat(Double.pi / 16))
        context?.translateBy(x: CGFloat(-viewWidth/2), y: CGFloat(-viewHeight/2))
        //計算需要繪制的列數(shù)和行數(shù)
        let VSpace:CGFloat = 50 * scale
        let HSpace:CGFloat = 30 * scale
        let horCount = Int(sqrtLength / (strWidth + HSpace) + 1)
        let verCount = Int(sqrtLength / (strHeight + VSpace) + 1)
        
        //此處計算出需要繪制水印文字的起始點颠毙,由于水印區(qū)域要大于圖片區(qū)域所以起點在原有基礎(chǔ)上移
        let orignX = -(sqrtLength-viewWidth)/2
        let orignY = -(sqrtLength-viewHeight)/2
        //在每列繪制時X坐標疊加
        var tempOrignX = orignX
        //在每行繪制時Y坐標疊加
        var tempOrignY = orignY
        
        for i in 0...(horCount * verCount) {
            attrStr.draw(in: CGRect.init(x: tempOrignX, y: tempOrignY, width: strWidth, height: strHeight))
            if i % horCount == 0 && i != 0 {
                tempOrignX = orignX
                tempOrignY += strHeight + VSpace
            } else {
                tempOrignX += strWidth + HSpace
            }
        }
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage
    }   
}


如何使用

        var image : UIImage = info[UIImagePickerController.InfoKey.editedImage] as! UIImage
        image = image.addWaterText(viewSize: self.imageView.size, text: "僅供XXXX試用")!
        self.imageView.image = image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末限番,一起剝皮案震驚了整個濱河市弓熏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌场斑,老刑警劉巖漓踢,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漏隐,居然都是意外死亡喧半,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門青责,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挺据,“玉大人,你說我怎么就攤上這事脖隶”饽停” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵产阱,是天一觀的道長婉称。 經(jīng)常有香客問我,道長构蹬,這世上最難降的妖魔是什么王暗? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮庄敛,結(jié)果婚禮上俗壹,老公的妹妹穿的比我還像新娘。我一直安慰自己铐姚,他們只是感情好策肝,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隐绵,像睡著了一般之众。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上依许,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天棺禾,我揣著相機與錄音,去河邊找鬼峭跳。 笑死膘婶,一個胖子當著我的面吹牛缺前,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悬襟,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼衅码,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了脊岳?” 一聲冷哼從身側(cè)響起逝段,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎割捅,沒想到半個月后奶躯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡亿驾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年嘹黔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莫瞬。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡儡蔓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乏悄,到底是詐尸還是另有隱情浙值,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布檩小,位于F島的核電站开呐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏规求。R本人自食惡果不足惜筐付,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阻肿。 院中可真熱鬧瓦戚,春花似錦、人聲如沸丛塌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赴邻。三九已至印衔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姥敛,已是汗流浹背奸焙。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人与帆。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓了赌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親玄糟。 傳聞我的和親對象是個殘疾皇子勿她,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355