压缩包含带加载图像的UIImageView的NSKeyedArchiver文件

时间:2013-05-12 23:46:10

标签: ios uiimageview png jpeg nskeyedarchiver

我有一个UIImageView的视图。它加载了jpg或png图像格式。说jpg图像版本的数据大小为100k。然后我使用NSKeyedArchiver将我的视图保存到文件中。文件大小约为3MB。如果我使用了图像的png版本,则归档文件仍然大约为3MB。

然后我使用zlib压缩存档文件。但它似乎没有太大作用。

我能做些什么让它尽可能地恢复到100k区域?

BTW:如果我使用UIWebView加载图像,那么使用图像的jpg版本,我将获得存档文件非常接近原始jpg的。

编辑:马特的回答给了我一个想法,所以这就是我最终做的事情:

注意:我的arleady使用了UIImageView的子类

  1. 创建一个iVar以保存图像的NSData
  2. 在致电encodeWithCoder之前在[super encodeWithCoder...]
  3. ,设置self.image = nil;并使用1中保存的self.imageNSData设置回图像数据。
  4. 确保将NSData iVar编码为1。
  5. initWithCoder中,使用NSData iVar恢复图像。

1 个答案:

答案 0 :(得分:1)

您不需要密钥存档器。

如果图片来自你的应用内部,你已经有了图像文件,所以没有什么可以保存的;只需存档图像的名称。

如果图像来自互联网,那么您真正需要做的就是将原始图像保存在文件中(并且,可能再次归档文件的路径,以便稍后恢复)。你有一个100K的JPG图像,所以为什么不捕获它,当你拥有它?如果它作为NSData到达,那么,那就是你的数据。如果没有,您可以使用UIImageJPEGRepresentation将其转换为JPEG数据。无论哪种方式,NSData都可以直接保存到文件中。

保存(以及稍后读取)图像数据的大多数灵活且强大的方法是使用ImageIO框架。