我们先来看一段简单的代码:
let imageView: UIImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
self.view.addSubview(imageView)
imageView.backgroundColor = UIColor.green
//显示方式1
let url = Bundle.main.url(forResource: "shotScreen", withExtension: "png")
imageView.image = UIImage(contentsOfFile: url!.path)
//显示方式2
// imageView.image = UIImage(named: "shotScreen")
上面代码是我们最常用的在UIImageView上显示图片的两种方式,用法非常的简单、还用。但是现在存在这样一个问题,假如我们显示一张非常大的图片(例如:10001000)在一个非常小的视图(100100)上,就会有很多内存浪费掉,因为实际消耗掉内存大小确实对应于1000*1000的大小。
我们可以针对大图做一些处理,得到小一点的图片,使其来适应小的显示视图,这样就可以达到节省内存空间的目的。
以下是常见的方法实现内容:
import Foundation
import UIKit
class LGJImageTool {
}
extension LGJImageTool {
//根据需要显示图片的视图尺寸来绘制图片
static func getImageWithViewSize(image: UIImage, newSize: CGSize) -> UIImage {
UIGraphicsBeginImageContext(newSize)
image.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
//根据需要显示图片大小的比例来绘制图片
static func getImageWithScaleSize(image: UIImage, scale: CGFloat) -> UIImage {
let originalSize = image.size
let newSize = CGSize(width: originalSize.width * scale, height: originalSize.height * scale)
UIGraphicsBeginImageContext(newSize)
image.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
//利用UIGraphicsImageRenderer根据需要显示图片的视图尺寸来绘制图片
static func get_ImageWithViewSize(image: UIImage, size: CGSize) -> UIImage {
let render = UIGraphicsImageRenderer(size: size)
return render.image { (rendererContext) in
image.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
}
}
//利用UIGraphicsImageRenderer根据需要显示图片的视图尺寸来绘制图片
static func get_ImageWithViewSize(imageName: String, size: CGSize) -> UIImage {
let render = UIGraphicsImageRenderer(size: size)
let image = UIImage(named: imageName)
return render.image { (rendererContext) in
image!.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
}
}
//利用UIGraphicsImageRenderer,传入本地图片url地址和需要显示的图片的大小来得到绘制好的图片
static func get_ImageWithViewSize(imageLocalUrl: NSURL, size: CGSize) -> UIImage {
let image = UIImage(contentsOfFile: imageLocalUrl.path!)
let render = UIGraphicsImageRenderer(size: size)
return render.image { (rendererContext) in
image?.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
}
}
}
使用的时候直接调用LGJImageTool类方法就可以。
let image = UIImage(named: "shotScreen")
// let newImage = getImageWithViewSize(image: image!, newSize:CGSize(width: 200, height: 200))
// imageView.image = newImage
// let newImage = get_ImageWithViewSize(image: image!, size: CGSize(width: 200, height: 200))
// imageView.image = newImage
imageView.image = LGJImageTool.get_ImageWithViewSize(image: image!, size: CGSize(width: 200,height: 200))