ios 图片裁剪框架_iOS 图片裁剪的实现方法

我经常看到网络上有各种关于图片裁剪的文章,就在爱站技术频道小编做数字图像处理之前,写了一个剪辑算法,本文主要介绍了iOS 图片裁剪的实现方法,需要的朋友可以参考以下内容。

通过 CGImage 或 CIImage 裁剪

UIImage有cgImage和ciImage属性,分别可以获得CGImage和CIImage对象。CGImage和CIImage对象都有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 图片裁剪的实现方法,在选择学习的时候,我们要自己分辨是否对自己有用,不要盲目跟随哦。希望爱站技术频道小编的介绍对大家有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值