将UIImage转换为NSData,但保持为GIF文件

3

我有一张UIImage图片,它是一个GIF文件。

我需要将它转换成NSData对象。 但是它需要保持为GIF格式,因此我不能使用UIImageJPEGRepresentation。

有什么想法吗?


1
你是说“它需要保持为GIF格式”,对吗? - Zigglzworth
3个回答

15
一旦成为UIImage,它就不再是gif了。它已经被解释为核心图形图像对象,并包装在UIImage的UIKit修饰中。你没有一个“是GIF的UIImage”。它曾经可能是,但那个时代已经过去了。
如果你正在下载这个东西(根据你的评论“我没有文件访问权限”假设如此),那么你应该将它作为数据下载并保留为数据,如果你基于这些数据创建UIImage,则需要保留这些数据。(这只是猜测,因为你的问题信息量很少。如果你能更详细地说明你想实现什么,我们可能可以给出更好的帮助。)

我本来是在寻找其他东西,但这正好回答了我的问题。谢谢。 - Shyam Bhat

9
我遇到了你提到的同样问题,这里是我用来将动态gif保存到照片并保持动画的代码:
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

NSData *data = [NSData dataWithContentsOfURL:[self getCurrentGIFURL]];

[library writeImageDataToSavedPhotosAlbum:data metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {}

基本上,如果您将gif从URL或文件中直接保存为NSData对象而不是将其作为UIImage,它将保持动画效果。

请问您能提供Swift版本吗? - Yash R

2
如果您知道文件路径,可以直接将其加载到NSData*中。例如:
NSData *gifData = [NSData dataWithContentsOfFile:@"myCoolPic.gif"];

NSData dataWithContentsOfFile docs


这是真的,但很遗憾并不容易……我无法访问该文件。 - Cocoadelica
3
那么,你是如何获取这个图像的呢? - darksky
3
啥?没有访问文件的权限,肯定会阻止你将其加载到NSData中...除了查看它、使用它、操作它,以及做几乎任何事情都会被限制。 - Zigglzworth
我得到的是NSData,但它直接来自AVCapture而不是文件。 - Cocoadelica
2
我必须使用以下代码从文件中获取数据:NSString* gifPath = [[NSBundle mainBundle] pathForResource:@"ajax-loader" ofType:@"gif"];,并将此字符串提供给上述函数。 - Martin Berger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接