Swift 給圖片添加文字水?。▓D片不失真)

話不多說(shuō),直接上代碼講解

在我的項(xiàng)目里,水印文字是大小不同的字體拼接的,所有這里也是對(duì)這種水印文字進(jìn)行的處理。

extension UIImage {
    /// 圖片加水印
    ///
    /// - Parameters:
    ///   - text: 水印完整文字
    ///   - textColor: 文字顏色
    ///   - textFont: 文字大小
    ///   - suffixText: 尾綴文字(如果是nil可以不傳)
    ///   - suffixFont: 尾綴文字大小(如果是nil可以不傳)
    ///   - suffixColor: 尾綴文字顏色(如果是nil可以不傳)
    /// - Returns: 水印圖片
    func drawTextInImage(text: String, textColor: UIColor, textFont: UIFont,suffixText: String?, suffixFont: UIFont?, suffixColor: UIColor?) -> UIImage {
        // 開(kāi)啟和原圖一樣大小的上下文(保證圖片不模糊的方法)
        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
        
        // 圖形重繪
        self.draw(in: CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height))
        
        var suffixAttr: [NSAttributedStringKey: Any] = [NSAttributedStringKey.foregroundColor:textColor, NSAttributedStringKey.font:textFont]
        let attrS = NSMutableAttributedString(string: text, attributes: suffixAttr)
        
        // 添加后綴的屬性字符串
        if let suffixStr = suffixText {
            let range = NSRange(location: text.count - suffixStr.count, length: suffixStr.count)
            if suffixFont != nil {
                suffixAttr[NSAttributedStringKey.font] = suffixFont
            }
            
            if suffixColor != nil {
                suffixAttr[NSAttributedStringKey.foregroundColor] = suffixColor
            }
            attrS.addAttributes(suffixAttr, range: range)
        }
        
        // 文字屬性
        let size =  attrS.size()
        let x = (self.size.width - size.width) / 2
        let y = (self.size.height - size.height) / 2
        
        // 繪制文字
        attrS.draw(in: CGRect(x: x, y: y, width: size.width, height: size.height))
        // 從當(dāng)前上下文獲取圖片
        let image = UIGraphicsGetImageFromCurrentImageContext()
        //關(guān)閉上下文
        UIGraphicsEndImageContext()
        
        return image!
    }
}
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,022評(píng)論 4 61
  • 條件編譯在處理機(jī)器依賴(lài)、調(diào)試以及編譯階段設(shè)定特定選項(xiàng)時(shí)十分有用。不過(guò)要小心條件編譯。各種控制很容易以一種無(wú)法預(yù)料的...
    bigwhite閱讀 359評(píng)論 0 1
  • 前言:本文是本人的一些淺薄見(jiàn)解,受水平限制,如有不當(dāng)或者缺漏之處,還望各位內(nèi)行指正補(bǔ)充。 一位老司機(jī),名字叫羅爾,...
    境自遠(yuǎn)塵皆入詠閱讀 645評(píng)論 1 2
  • 硬件開(kāi)發(fā)需要底層程序的開(kāi)發(fā),畢竟一個(gè)程序量只有幾十K甚至更小的規(guī)模要它干一定的工作得精打細(xì)算。難的不是編程,是設(shè)計(jì)...
    asker閱讀 477評(píng)論 0 6

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