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

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

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

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

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

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

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

  1. 创建一个iVar来保存图像的NSData
  2. 在调用[super encodeWithCoder...]之前的[super encodeWithCoder...] ,设置self.image = nil ; 并使用1中保存的NSDataself.image设置回图像数据。
  3. 确保将NSData iVar编码为1。

initWithCoder ,使用NSData iVar恢复映像。

您不需要键控归档器。

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

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

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