[英]UIImage from NSInputStream
我正在从Parse下载2400x1600图像,我不希望它同时将所有数据保存在内存中。 来自Parse的PFFile对象有一个方便的方法来获取NSData作为NSInputStream,所以当最终下载数据时,我最终得到一个NSInputStream。 所以现在我想用NSInputStream来获取我的UIImage。 它应该像创建具有文件方法内容的UIImage一样工作,即不是整个图像一次加载到内存中。 我认为从NSInputStream写入文件然后使用UIImage的文件方法的内容应该在我的情况下正常工作,但我发现无法从NSInputStream写入文件。
任何代码示例或一些指南都将非常感激。
提前致谢。
要完成此操作,您可以设置NSOutputStream
,然后将接收的数据流式传输到文件。 使用initToFileAtPath:append:
创建输出流initToFileAtPath:append:
使用YES进行追加。 在输入流回调中,通过调用write:maxLength:
将数据传递给输出流write:maxLength:
在文档中阅读更多内容 )。 一旦流完成,您就可以将完整的映像存档,而无需将其完全存储在内存中。
由于你正在使用Parse,因此Henri的上述答案更合适,但这是一般解决方案。
在iOS / OS X的文档中 ,Parse给出了一个例子。
检索图像涉及调用PFFile上的一个getData变体。 在这里,我们从另一个名为anotherPhoto的UserPhoto中检索图像文件:
PFFile *userImageFile = anotherPhoto[@"imageFile"];
[userImageFile getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) {
if (!error) {
UIImage *image = [UIImage imageWithData:imageData];
}
}];
现在,我不太明白你使用NSInputStream的原因,主要有两个原因:
简而言之,您应该使用上述方法,除非您真正关心数据的加载方式,例如想要在它进入时操纵它(在您描述的情况下极不可能)。
至于把它全部放在内存中,你提供的尺寸不是很大,是的,你可以将它流式传输到一个文件中,但假设你想在应用程序中显示它的全尺寸,内存的问题会出现在某些尽管如此,即你只是推迟不可避免的事情。 如果不是这种情况(不显示全尺寸),那么将源图像切割成瓷砖并使用它们可能是个好主意,可以更快地下载特定的瓷砖并更容易记忆。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.