源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

iOS 图片裁剪的实现方法

  • 时间:2020-11-03 06:58 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:iOS 图片裁剪的实现方法
iOS 图片裁剪方法,主要有两种,一起来看下。 [b]通过 CGImage 或 CIImage 裁剪[/b] [code]UIImage[/code]有[code]cgImage[/code]和[code]ciImage[/code]属性,分别可以获得[code]CGImage[/code]和[code]CIImage[/code]对象。[code]CGImage[/code]和[code]CIImage[/code]对象都有[code]cropping(to:)[/code]方法,传入[code]CGRect[/code]的参数表示要裁剪的区域(采用[code]UIImage[/code]的坐标)。
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
}
对[code]CGImage[/code]来说,传入的[code]CGRect[/code]参数如果完全不在原图区域内,[code]cropping(to:)[/code]方法返回空;如果有部分在原图区域内,[code]cropping(to:)[/code]方法返回在原图区域部分的[code]CGImage[/code]。 [b]通过位图(Bitmap)裁剪[/b] 通过位图重新绘制图片,也可以获得裁剪之后的图片。
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
}
位图大小为需要裁剪区域[code]CGRect[/code]的大小[code]size[/code]。用原图绘制,为了使裁剪区域正好在位图区域,需要进行坐标位移[code]context.translateBy(x: -rect.minX, y: -rect.minY)[/code]。 如果传入的[code]CGRect[/code]参数有部分或全部不在原图区域内,则超出原图区域的部分也会被绘制(绘制为透明),这与[code]CGImage[/code]的裁剪方法不同。 简单试了几次,发现通过 CGImage 裁剪的 CPU 占用率比通过位图裁剪要低。仅从性能角度考虑,推荐使用前者。如果希望裁剪出来的图片不超出原图区域,也推荐使用前者。如果需要绘制其他的内容(比如其他形状、颜色,或绘制的内容超出原图区域),则要使用后者。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部