获取GIF图片中所有的单图

一、场景需求

iOS系统中不支持flash,所以gif图片无法播放。需要将gif中的所有单图拿出来,自己来实现轮播动画。ImageIO框架中提供了获取gif图片中所有单图的相关API。

二、使用简介

1.首先根据gif图片文件初始化CGImageSourceRef:CFDataRef可以通过读取gif文件来获取
CGImageSourceRef CGImageSourceCreateWithData(CFDataRef data, CFDictionaryRef options)
2.检查此文件是否是gif图片
UTTypeConformsTo(CGImageSourceGetType(imageSource), kUTTypeGIF) && CGImageSourceGetCount(imageSource) > 1
3.获取gif图片里面的单图数据
(1)获取图片数量:
NSUInteger numberOfFrames = CGImageSourceGetCount(imageSource);
(2)获取gif相关的属性字典:
  NSDictionary *imageProperties = CGImageSourceCopyProperties(imageSource, NULL);
  NSDictionary *gifProperties = [imageProperties objectForKey:(NSString *)kCGImagePropertyGIFDictionary];
(3)获取gif图片的循环次数
 NSInteger loopCount = [gifProperties[(NSString *)kCGImagePropertyGIFLoopCount] unsignedIntegerValue]
(4)循环获取单张图片数据以及对应单图的停滞时间  
  for (NSUInteger i = 0; i < numberOfFrames; ++i) {
  CGImageRef image = CGImageSourceCreateImageAtIndex(imageSource, i, NULL);
  NSTimeInterval frameDuration = CGImageSourceGetGifFrameDelay(imageSource, i);
  }

你可能感兴趣的:(iOS大类)