有没有办法计算gif播放的总持续时间?

时间:2018-01-08 17:27:13

标签: ios swift animation gif

我想计算一个gif播放的总持续时间。它可以是gif的持续时间或gif的帧数。尝试过使用FLAnimatedImage,SDWebImage和YYImage但是无法真正达到我想要的效果。 gif是从远程URL加载的,然后我想计算它播放的持续时间。

1 个答案:

答案 0 :(得分:0)

这是以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图像,提取帧延迟信息并对其求和。