【发布时间】:2016-12-02 07:44:34
【问题描述】:
我有一个 UIImage,它是一个 GIF 文件。
我需要把它变成一个 NSData 对象。 但它需要保持 GIF,所以我不能使用 UIImageJPEGRepresentation。
有什么想法吗?
【问题讨论】:
-
你的意思是“它需要保持 GIF 格式”对吧?
标签: iphone objective-c ios cocoa-touch nsdata
我有一个 UIImage,它是一个 GIF 文件。
我需要把它变成一个 NSData 对象。 但它需要保持 GIF,所以我不能使用 UIImageJPEGRepresentation。
有什么想法吗?
【问题讨论】:
标签: iphone objective-c ios cocoa-touch nsdata
一旦它是 UIImage,它就不再是 gif。它已经被解释为一个核心图形图像对象,包裹在 UIImage 的 UIKit 修剪中。您没有“是 GIF”的 UIImage。可能曾经有过一次,但那段时间已经过去了。
如果您正在下载这个东西(我假设您的评论“我无权访问该文件”),那么您应该将其作为数据下载,并将其作为数据保存,如果您制作了 UIImage根据该数据,您可能需要保留这些数据。
(不过,这全是猜测,因为您正在逐点滴漏有关您的问题的细节。如果您能大声说出您想要完成的事情,我们可能会提供更好的帮助。)
【讨论】:
我遇到了你提到的同样的问题,这是我用来将动画 gif 保存到照片而不丢失动画的代码:
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
NSData *data = [NSData dataWithContentsOfURL:[self getCurrentGIFURL]];
[library writeImageDataToSavedPhotosAlbum:data metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {}
基本上,如果您将来自 URL 或文件的 gif 直接保存为 NSData 对象而不是使其成为 UIImage,它将保留动画。
【讨论】:
如果您知道文件路径,则可以直接将其加载到 NSData* 中。如:
NSData *gifData = [NSData dataWithContentsOfFile:@"myCoolPic.gif"];
【讨论】:
NSString* gifPath = [[NSBundle mainBundle] pathForResource:@"ajax-loader" ofType:@"gif"]; 并将这个字符串提供给上面的函数。