溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS如何實現圖片裁剪

發布時間:2021-07-08 14:27:50 來源:億速云 閱讀:489 作者:小新 欄目:移動開發

這篇文章主要介紹iOS如何實現圖片裁剪,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

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 占用率比通過位圖裁剪要低。僅從性能角度考慮,推薦使用前者。如果希望裁剪出來的圖片不超出原圖區域,也推薦使用前者。如果需要繪制其他的內容(比如其他形狀、顏色,或繪制的內容超出原圖區域),則要使用后者。

以上是“iOS如何實現圖片裁剪”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女