在Twitter上分享时,GIF不会制作动画

时间:2014-07-27 23:55:20

标签: ios image gif

我正在制作NSArray UIImage的动画GIF文件。并将其保存在NSDocumentDirectory以及iPhone的相册中。

我面临的问题是,当我在Email Composer或iMessage中打开已保存的GIF时,它会动画很好。但是当我通过Twitter分享它时,它没有动画。我尝试通过iPhone上的Twitter应用程序分享并看到一个有趣的事情(下面的ScreenShot)我使用Safari从不同网站下载的GIF在GIF的左上角显示标签'GIF'。虽然我保存的GIF没有。这可能是什么问题?任何人都可以指导我。

enter image description here

以下是创建GIF文件的代码:

float delay = 1.0/15.0; // 15 FPS

NSDictionary *prep = @{
                       (__bridge id)kCGImagePropertyGIFDictionary: @{
                               (__bridge id)kCGImagePropertyGIFDelayTime: @(delay) 
                               }
                       };

//    static NSUInteger kFrameCount = 16;

NSDictionary *fileProperties = @{
                                 (__bridge id)kCGImagePropertyGIFDictionary: @{
                                         (__bridge id)kCGImagePropertyGIFLoopCount: @0 // 0 means loop forever
                                         }
                                 };

CFURLRef url = (__bridge CFURLRef)[NSURL fileURLWithPath:path];

CGImageDestinationRef dst = CGImageDestinationCreateWithURL(url, kUTTypeGIF, [images count], nil);
CGImageDestinationSetProperties(dst, (__bridge CFDictionaryRef)fileProperties);

for (int i=0;i<[images count];i++)
{
        //load anImage from array
        UIImage * anImage = [images objectAtIndex:i];

        CGImageDestinationAddImage(dst, anImage.CGImage,(__bridge CFDictionaryRef)prep);

}

bool fileSave = CGImageDestinationFinalize(dst);
CFRelease(dst);
if(fileSave) {
    NSLog(@"animated GIF file created at %@", path);
}else{
    NSLog(@"error: no animated GIF file created at %@", path);
}

将GIF保存到相册以及NSDocumentDirectory中。要保存在iPhone的相册中,请输入以下代码:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

NSData *data = [NSData dataWithContentsOfFile:tempPath];

[library writeImageDataToSavedPhotosAlbum:data metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
    if (error) {
        NSLog(@"Error Saving GIF to Photo Album: %@", error);
    } else {
        // TODO: success handling
        NSLog(@"GIF Saved to %@", assetURL);

        success(tempPath);
    }
}];

HJImagesToGIF是一个很大的帮助,以及this gist

更新:

分析2个GIF的图像标题: 1-图像标题: GIF89a - 通过safari下载并在twitter应用中显示GIF标签 2-图像标题: GIF87a - 通过代码创建,在twitter应用中不显示GIF标签

所以图像标题!嗯..我该怎么改呢?

1 个答案:

答案 0 :(得分:7)

好的,所以解决了这个问题,我不确定它是否是最好的解决方案,并且会感谢任何人提供更好的解决方案!

这个问题确实与我通过Code创建的GIF图像标题有关。 我拿了一个GIF89a标头GIF并复制了标题(前6个字节)并用它替换了我的GIF图像标题。现在在推特以及电子邮件和iMessage上工作正常。

以下是我使用的代码:

NSMutableData *gifData = [NSMutableData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"1.gif" ofType:nil]]; // GIF89a file
NSMutableData *data = [NSMutableData dataWithContentsOfFile:path]; // My created GIF file 
NSMutableData *gif89 = [NSMutableData dataWithData:[gifData subdataWithRange:NSMakeRange(0, 6)]]; // the first 6 bytes we needed (or the Header)
[data replaceBytesInRange:NSMakeRange(0, 6) withBytes:gif89.bytes]; // replace the header.. Voila!