1

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

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

我能做些什么来让它尽可能地关闭 100k 区域?

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

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

注意:我已经使用了 UIImageView 的子类

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

initWithCoder,使用NSDataiVar 恢复图像。

4

1 回答 1

1

为此,您不需要密钥存档器。

如果图像来自您的应用程序内部,则您已经获得了图像文件,因此无需保存;只需存档图像的名称。

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

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

于 2013-05-13T00:03:25.633 回答