美文网首页Swift编程
UIGraphicsImageRenderer图片渲染优化

UIGraphicsImageRenderer图片渲染优化

作者: Double丶K | 来源:发表于2019-11-27 21:47 被阅读0次

回顾一个经典面试题

加载网络图片,或者从相册读取图片的时候,如果ImageView的本身就是固定的200x200,加载800x800的图片会有什么问题?

答案:载入800x800的图片用到200x200的控件上是很浪费内存。需要消耗的内存大小800x800x4bit。(解决方案:在使用前把图片调整到需要的大小)

方法如下:

func imageWithImageScaledToSize(image:UIImage,newSize:CGSize) -> UIImage {
        UIGraphicsBeginImageContext(newSize)
        image.draw(in: CGRect.init(x: 0, y: 0, width: newSize.width, height: newSize.height))
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage!
    }
    
    func imageWithImageResizerFactor(image:UIImage,scale:CGFloat) -> UIImage {
        let originalSize = image.size
        let newSize = CGSize.init(width: originalSize.width*scale, height: originalSize.height*scale)
        UIGraphicsBeginImageContext(newSize)
        image.draw(in: CGRect.init(x: 0, y: 0, width: newSize.width, height: newSize.height))
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage!
    }

iOS10新增UIGraphicsImageRenderer来代替UIGraphicsBeginImageContext
UIGraphicsImageRenderer官方文档的解释:一个支持创建核心图像的渲染器。

        ggImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 300, 400, 300)];
        [self.view addSubview:ggImageView];
        NSURL *imgUrl = [[NSBundle mainBundle] URLForResource:@"DSC_0645" withExtension:@"jpeg"];
        UIImage *ggImage = [self resiImage:imgUrl size:ggImageView.bounds.size];
        ggImageView.image = ggImage;
//常用的加载大图方法
 //        ggImageView.image = [UIImage imageWithContentsOfFile:imgUrl.path];



//绘制UIImage
- (UIImage*)resiImage:(NSURL*)url size:(CGSize)size{
    UIImage *testIm = [UIImage imageWithContentsOfFile:url.path];
    UIGraphicsImageRenderer *re = [[UIGraphicsImageRenderer alloc]initWithSize:size];
    return [re imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {
        [testIm drawInRect:CGRectMake(0, 0, size.width, size.height)];
    }];
}

加载10兆左右的大图速度确实提升很多。

相关文章

  • UIGraphicsImageRenderer图片渲染优化

    回顾一个经典面试题 加载网络图片,或者从相册读取图片的时候,如果ImageView的本身就是固定的200x200,...

  • iOS 图片渲染

    1.图片的加载 ------> 2.图片的解码 ------>图片的渲染 引用 图片加载优化

  • 前端性能优化

    性能优化的话大致有以下几个部分:加载优化图片优化CSS优化脚本优化渲染优化 加载优化 1.减少http请求 基本原...

  • 图片渲染性能优化

    谁吃掉我们的CPU: 方法CA::Render::create_image_from_provider 图片预解码...

  • 2018-07-04

    后台绘制圆角图片 参考链接链接 iOS 离屏渲染优化(Offscreen Render)

  • 2020-02-24 网站性能优化的方法

    前端网站性能优化主要包括 网络加载类,页面渲染类,css 优化类 javascript 的执行类 图片类 缓存类 ...

  • 前端页面性能优化

    一、PC端优化策略 主要包括网络加载类、页面渲染类、CSS优化类、JavaScript执行类、缓存类、图片类、架构...

  • 前端性能优化方式

    2.前端性能优化方式 减少http请求。 大量图片渲染使用懒加载技术,图片压缩。 压缩代码,将javascript...

  • 异步渲染1

    异步渲染优化篇章 一.为什么需要异步渲染,异步渲染有什么好处?? 我们添加到项目或从服务端获取的图片格式基本上都为...

  • 前端性能初步优化

    性能优化有两个方向 优化页面渲染 减小页面体积,提升网络加载 优化页面渲染 对于优化页面渲染可以进行如下方案来进行...

网友评论

    本文标题:UIGraphicsImageRenderer图片渲染优化

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