如何从gif文件中获取每秒帧数?

时间:2012-03-07 10:17:20

标签: iphone objective-c image animated-gif frame-rate

我试图从gif文件中获取每秒帧数, 我正在将gif文件转换为NSData,然后从该NSData我使用此代码获取一个帧数组: - (NSMutableArray *)getGifFrames:(NSData *)data {

NSMutableArray *frames = nil;
CGImageSourceRef src = CGImageSourceCreateWithData((CFDataRef)data, NULL);
if (src) {
    size_t l = CGImageSourceGetCount(src);
    frames = [NSMutableArray arrayWithCapacity:l];
    for (size_t i = 0; i < l; i++) {
        CGImageRef img = CGImageSourceCreateImageAtIndex(src, i, NULL);
        if (img) {
            [frames addObject:[UIImage imageWithCGImage:img]];
            CGImageRelease(img);
        }   
    }   
    CFRelease(src);
} 
return frames;

}

无论如何我可以获得GIF的FPS吗? 谢谢

3 个答案:

答案 0 :(得分:11)

GIF文件不包含FPS值,而是每个帧都包含持续时间。

每个框架都包含一个标题。

十六进制字节编号324包含以百分之一秒为单位的帧持续时间,例如09 00将为0.09秒。

编辑:参考http://en.wikipedia.org/wiki/Graphics_Interchange_Format#Animated_GIF

答案 1 :(得分:1)

看一下我发现的代码--AnimatedGif类包含一个方法“GIFReadExtensions”,它似乎完全符合你的要求:

Animated and transparent GIF’s for iPhone made easy!

答案 2 :(得分:0)

GIF格式指定每帧的渲染持续时间(延迟),以毫秒为单位设置。每个帧的持续时间可能不同,这使得无法计算总体帧速率。