swift UIImage显示渲染优化

我们先来看一段简单的代码:

        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))

你可能感兴趣的:(swift UIImage显示渲染优化)