国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS 圖片裁剪的實現方法

2019-10-21 18:48:00
字體:
來源:轉載
供稿:網友

iOS 圖片裁剪方法,主要有兩種,一起來看下。

通過 CGImage 或 CIImage 裁剪

UIImagecgImageciImage屬性,分別可以獲得CGImageCIImage對象。CGImageCIImage對象都有cropping(to:)方法,傳入CGRect的參數表示要裁剪的區域(采用UIImage的坐標)。

static func cropImage(_ image: UIImage, withRect rect: CGRect) -> UIImage? {  if let cgImage = image.cgImage,    let croppedCgImage = cgImage.cropping(to: rect) {    return UIImage(cgImage: croppedCgImage)  } else if let ciImage = image.ciImage {    let croppedCiImage = ciImage.cropping(to: rect)    return UIImage(ciImage: croppedCiImage)  }  return nil}

CGImage來說,傳入的CGRect參數如果完全不在原圖區域內,cropping(to:)方法返回空;如果有部分在原圖區域內,cropping(to:)方法返回在原圖區域部分的CGImage

通過位圖(Bitmap)裁剪

通過位圖重新繪制圖片,也可以獲得裁剪之后的圖片。

static func cropImage(_ image: UIImage, withRect rect: CGRect) -> UIImage? {  UIGraphicsBeginImageContext(rect.size)  guard let context = UIGraphicsGetCurrentContext() else { return nil }  context.translateBy(x: -rect.minX, y: -rect.minY)  image.draw(at: .zero)  let croppedImage = UIGraphicsGetImageFromCurrentImageContext()  UIGraphicsEndImageContext()  return croppedImage}

位圖大小為需要裁剪區域CGRect的大小size。用原圖繪制,為了使裁剪區域正好在位圖區域,需要進行坐標位移context.translateBy(x: -rect.minX, y: -rect.minY)

如果傳入的CGRect參數有部分或全部不在原圖區域內,則超出原圖區域的部分也會被繪制(繪制為透明),這與CGImage的裁剪方法不同。

簡單試了幾次,發現通過 CGImage 裁剪的 CPU 占用率比通過位圖裁剪要低。僅從性能角度考慮,推薦使用前者。如果希望裁剪出來的圖片不超出原圖區域,也推薦使用前者。如果需要繪制其他的內容(比如其他形狀、顏色,或繪制的內容超出原圖區域),則要使用后者。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 伊宁市| 海宁市| 台湾省| 嵩明县| 沾化县| 富民县| 保定市| 洪江市| 游戏| 六盘水市| 通榆县| 金山区| 珲春市| 广平县| 祁门县| 寻乌县| 万全县| 万盛区| 天台县| 温泉县| 海城市| 息烽县| 泰来县| 若尔盖县| 东丽区| 岢岚县| 闽清县| 元江| 连云港市| 甘洛县| 怀宁县| 邵武市| 白山市| 康平县| 名山县| 休宁县| 来凤县| 富平县| 青龙| 汾阳市| 乌审旗|