/*
1 把用户传入的gif图片->NSData
2 根据该Data创建一个图片数据源(NSData->CFImageSourceRef)
3 计算该数据源中一共有多少帧,把每一帧数据取出来放到图片数组中
4 根据得到的数组+计算的动画时间 == 可动画的image
5 [UIImage animatedImageWithImages:images duration:duration];
*/
CGImageSourceRef
source =
CGImageSourceCreateWithData
((
__bridge
CFDataRef
)data,
NULL
);
size_t
count =
CGImageSourceGetCount
(source);
UIImage
*animatedImage;
//如果图片帧数小于等于1,那么就直接把二进制数据转换为图片,并返回图片
if (count <= 1) {
animatedImage = [[UIImage alloc] initWithData:data];
}else {
//创建可变的空的图片数组
NSMutableArray *images = [NSMutableArray array];
//初始化动画播放时间为0
NSTimeInterval duration = 0.0f;
// 遍历并且提取所有的动画帧
for (size_t i = 0; i < count; i++) {
CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);
// 累加动画时长
duration += [self sd_frameDurationAtIndex:i source:source];
// 将图像添加到动画数组
[images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]];
//释放操作
CGImageRelease(image);
}
//计算动画时间
if (!duration) {
duration = (1.0f / 10.0f) * count;
}
// 建立可动画图像
animatedImage = [UIImage animatedImageWithImages:images duration:duration];
}