iOS 图片裁剪的实现方法

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

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

以上就是iOS 图片裁剪的实现方法的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 移动