[Xcode10 實際操作]九、實用進階-(16)給圖片添加水印效果
阿新 • • 發佈:2018-12-09
圖片資源 寬度 water 情況下 from RKE 演示 warn ica
本文將演示如何截取屏幕畫面,並將截取圖片,存入系統相冊。
在項目文件夾【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 - margin21 //創建一個在目標位置上的顯示區域,用來放置水印圖片 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 }
[Xcode10 實際操作]九、實用進階-(16)給圖片添加水印效果