我想计算一个gif播放的总持续时间。它可以是gif的持续时间或gif的帧数。尝试过使用FLAnimatedImage,SDWebImage和YYImage但是无法真正达到我想要的效果。 gif是从远程URL加载的,然后我想计算它播放的持续时间。
这是以GIF时间单位(1单位= 10毫秒)返回总持续时间的函数。
data
是指向GIF数据的指针,size
是它的大小。
long Duration(uint8_t *data, long size) {
long desc, time = 0;
uint8_t *buff;
if ((size > 13) && data && (data[0] == 71) && (data[1] == 73)
&& (data[2] == 70) && (data[3] == 56) && (data[5] == 97)
&& ((data[4] == 55) || (data[4] == 57))) {
buff = data + 13 + ((data[10] & 0x80)? 6 << (data[10] & 7) : 0);
if ((size -= buff - data) > 0)
while ((desc = *buff++) != 0x3B) {
size--;
if (desc == 0x2C) {
desc = 9 + ((buff[8] & 0x80)? 6 << (buff[8] & 7) : 0);
buff += desc;
if ((size -= desc) <= 0)
break;
}
else if ((desc == 0x21) && (*buff == 0xF9))
time += *(uint16_t*)(buff + 3);
buff++;
if (--size <= 0)
break;
do {
buff += (desc = 1 + *buff);
if ((size -= desc) <= 0)
return time;
} while (desc > 1);
}
}
return time;
}
该功能手动解析GIF图像,提取帧延迟信息并对其求和。