1. 程式人生 > >[Xcode10 實際操作]九、實用進階-(16)給圖片新增水印效果

[Xcode10 實際操作]九、實用進階-(16)給圖片新增水印效果

本文將演示如何擷取螢幕畫面,並將擷取圖片,存入系統相簿。

在專案資料夾【DemoApp】上點選滑鼠右鍵

->【New File】建立一個擴充套件檔案->模板選擇視窗:【Swift File】->【Next】

->【Save As】:ExtensionUIImage.swift->儲存預設的儲存位置點選【Create】

在【ExtensionUIImage.swift】新增一個針對UIImage類的擴充套件。

擴充套件可以向一個已有的類、結構體或列舉型別新增新功能,

包括在沒有獲取原始碼的情況下,對型別進行功能擴充套件。

點選編輯程式碼檔案【ExtensionUIImage.swift】

 1 import UIKit
 2 
 3 extension UIImage
 4 {
 5     //新增一個擴充套件方法,包括的引數:
 6     //1.水印圖片
 7     //2.透明圖
 8     //3.邊距值
 9     //並返回一個新增水印後的圖片
10     func addWaterMark(_ image:UIImage, opacity:CGFloat, margin:CGFloat) -> UIImage
11     {
12         //建立一個位置在(0,0),尺寸與水印圖片相同的顯示區域
13         let imgFrame = CGRect(x: 0
, y: 0, width: image.size.width, height: image.size.height) 14 15 //水印圖片將放置在原始圖片的右下角, 16 //通過將原始圖片的寬度,減去水印圖片的寬度 17 //獲得水印圖片在水平方向的位置 18 let posX = self.size.width - imgFrame.size.width - margin 19 //同理獲得水印圖片在垂直方向的位置 20 let posY = self.size.height - imgFrame.size.height - margin
21 //建立一個在目標位置上的顯示區域,用來放置水印圖片 22 let targetFrame = CGRect(x: posX, 23 y: posY, 24 width: image.size.width, 25 height: image.size.height) 26 27 //建立一個圖片上下文,上下文的尺寸與原始圖片的尺寸相同 28 UIGraphicsBeginImageContext(self.size) 29 30 //首先將原始圖片繪製在上下文中,並設定其位置在(0,0) 31 self.draw(in: CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)) 32 //將水印圖片,繪製在上下文中的目標位置 33 //設定影象混合模式為正常、並設定其透明度資訊 34 image.draw(in: targetFrame, blendMode: .normal, alpha: opacity) 35 //從上下文中,獲得最後的渲染圖片 36 let waterMarkedImage = UIGraphicsGetImageFromCurrentImageContext() 37 38 //關閉上下文環境,及時釋放資源 39 UIGraphicsEndImageContext() 40 41 //最後返回最終的渲染結果 42 return waterMarkedImage! 43 } 44 }

在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】

現在呼叫上文的擴充套件方法,實現給圖片新增水印的功能。

 1 import UIKit
 2 
 3 class ViewController: UIViewController {
 4 
 5     override func viewDidLoad() {
 6         super.viewDidLoad()
 7         // Do any additional setup after loading the view, typically from a nib.
 8         
 9         //首先在資原始檔夾中,載入一張圖片資源
10         var sourceImage = UIImage(named: "Pic1")
11         //同樣載入一張圖片資源,作為水印圖片
12         let waterMarkImage = UIImage(named: "lion")
13         //呼叫擴充套件方法,將原始圖片和水印圖片,渲染成最終效果
14         //並設定相關的透明度和邊距資訊
15         sourceImage = sourceImage!.addWaterMark(waterMarkImage!, opacity: 0.5, margin: 20)
16         //初始化一個影象檢視,用來顯示混合後的圖片
17         let imageView = UIImageView(image: sourceImage)
18 
19         //將影象檢視,新增到當前檢視控制器的根檢視
20         self.view.addSubview(imageView)
21     }
22     
23     override func didReceiveMemoryWarning() {
24         super.didReceiveMemoryWarning()
25         // Dispose of any resources that can be recreated.
26     }
27 }