iOS 图片裁剪的实现方法

 更新时间:2017年03月03日 09:26:58   作者:Silence_cnblogs  
本篇文章主要介绍了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实现多控制器切换效果

    iOS实现多控制器切换效果

    这篇文章主要为大家详细介绍了iOS实现多控制器切换效果,带滑动动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • iOS 真机调试微信小程序

    iOS 真机调试微信小程序

    下面介绍下如何使用 Xcode、Reveal 和 Safari 来真机调试 iOS 上的小程序。感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-08-08
  • iOS中解决Xcode9的Log日志无法输出中文的问题小结

    iOS中解决Xcode9的Log日志无法输出中文的问题小结

    这篇文章主要介绍了iOS中解决Xcode9的Log日志无法输出中文的问题小结,需要的朋友可以参考下
    2017-11-11
  • IOS之构造方法与自定义构造方法的区别与实现

    IOS之构造方法与自定义构造方法的区别与实现

    本篇文章主要介绍了构造方法以及自定义构造方法的实现,需要的朋友可以参考下
    2015-07-07
  • iOS 检测文本中的URL、电话号码等信息

    iOS 检测文本中的URL、电话号码等信息

    本文主要介绍了iOS 检测文本中的URL、电话号码等信息的相关资料。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • iOS利用UITableView设置全屏分隔线的3种方法总结

    iOS利用UITableView设置全屏分隔线的3种方法总结

    这篇文章主要介绍了关于iOS利用UITableView设置全屏分隔线的几种方法的相关对比,分析这三种的各自优缺点,并且分享了设置UITableView的单元格分割线离屏幕左右的距离为0的方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。
    2017-11-11
  • iOS实现简易的计算器

    iOS实现简易的计算器

    这篇文章主要为大家详细介绍了iOS实现简易的计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • iOS10语音识别框架SpeechFramework应用详解

    iOS10语音识别框架SpeechFramework应用详解

    在iOS10系统了,apple开放了与语音识别相关的接口,开发者可以将其应用到自己的App中,实现用户通过语音进行功能操作。 这篇文章主要介绍了iOS10语音识别框架SpeechFramework应用,需要的朋友可以参考下
    2016-09-09
  • IOS自带Email的两种方法实例详解

    IOS自带Email的两种方法实例详解

    这篇文章主要介绍了IOS自带Email的两种方法实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • iOS把图片缓存到本地的几种方法(总结)

    iOS把图片缓存到本地的几种方法(总结)

    下面小编就为大家分享一篇iOS把图片缓存到本地的几种方法总结,具有很的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12

最新评论