SDWebImage源码阅读之UIImage + GIF


layout: post
title: "SDWebImage源码阅读之UIImage + GIF"
date: 2014-12-19 14:48
comments: false
tags:
- SDWebImage


SDWebImage 加载gif图的原理

gif图片显示

gif图片是一帧一帧的图片组成, 相当于一个相册图片集合。通过这些图片的显示时间, 可以组成一个动画。

核心方法

  • 传入gif图片的数据data, 返回交给imageView就可以动画显示gif图片了

    • (UIImage *)sd_animatedGIFWithData:(NSData *)data

过程分析

  • 获取数据源, 以后可以通过这个源头获得 某一帧的 数据和时间等
    CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);

  • 获得图片的帧数 size_t count = CGImageSourceGetCount(source);

  • 通过duration = duration + [self sd_frameDurationAtIndex:i source:source]; 方法可以获得总的帧动画时间, 内部通过每一帧的帧字典可以获得每一个的时间, 通过累加 得到总的事件duration

  • animatedImage = [UIImage animatedImageWithImages:images duration:duration]; 通过这个方法返回一个处理过后的image, 可以直接显示动画了

细节处理

没有传入data

  + (UIImage *)sd_animatedGIFWithData:(NSData *)data {
    if (!data) {
        return nil;
    }

属性时间获取失败

  + if (!duration) {
            duration = (1.0f / 10.0f) * count;
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 技术无极限,从菜鸟开始,从源码开始。 由于公司目前项目还是用OC写的项目,没有升级swift 所以暂时SDWebI...
    充满活力的早晨阅读 14,341评论 0 2
  • 本章开始将介绍SDWebImage库在原有类的基础上增加的拓展方法来完善图片下载功能,涉及的类有NSData+Im...
    jiangjunwy阅读 3,966评论 0 0
  • Gif图片是非常常见的图片格式,尤其是在聊天的过程中,Gif表情使用地很频繁。但是iOS竟然没有现成的支持加载和播...
    weicyNO_1阅读 5,732评论 0 0
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,726评论 4 61
  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 8,982评论 2 4

友情链接更多精彩内容