美文网首页
swift UIImage显示渲染优化

swift UIImage显示渲染优化

作者: 见哥哥长高了 | 来源:发表于2019-12-23 10:59 被阅读0次

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

            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显示渲染优化

          本文链接:https://www.haomeiwen.com/subject/utkznctx.html