当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS 图片裁剪的实现方法

iOS 图片裁剪的实现方法

2019年07月24日  | 移动技术网IT编程  | 我要评论

临淄招聘,georges chakra,qq书城

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 占用率比通过位图裁剪要低。仅从性能角度考虑,推荐使用前者。如果希望裁剪出来的图片不超出原图区域,也推荐使用前者。如果需要绘制其他的内容(比如其他形状、颜色,或绘制的内容超出原图区域),则要使用后者。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网