我有一个带有 UIImageView 的 View 。它以 jpg 或 png 图像格式加载。说 jpg 图像版本的数据大小为 100k。然后我使用 NSKeyedArchiver 将我的 View 保存到一个文件中。文件的大小约为 3MB。如果我使用图像的 png 版本,存档文件仍然在 3MB 左右。
然后我使用 zlib 压缩归档文件。但似乎并没有太大的作用。
我能做些什么来让它尽可能地回到 100k 区域?
顺便说一句:如果我使用 UIWebView 加载图像,那么使用 jpg 版本的图像我将获得非常接近原始 jpg 的存档文件。
编辑:马特的回答给了我一个想法,所以这就是我最终做的事情:
注意:我已经使用了 UIImageView 的子类
- 创建一个 iVar 来保存图像的
NSData
- 在
encodeWithCoder
调用[super encodeWithCoder...]
之前,设置self.image = nil
;并使用 1 中保存的NSData
将self.image
设置回图像数据。 - 确保将
NSData
iVar 编码为 1。
在initWithCoder
中,使用NSData
iVar恢复图像。
最佳答案
为此您不需要键控存档器。
如果图像来自您的应用程序内部,则您已经有了图像文件,因此无需保存任何内容;只需存档图像的名称。
如果图像来自互联网,那么您真正需要做的就是将原始图像保存在文件中(同样,可能会将文件的路径存档,以便您以后可以恢复它)。你有一张 JPG 图片,在某个时候是 100K,那么为什么不在你拥有它的时候直接捕捉它呢?如果它作为 NSData 到达,那么,这就是您的数据。如果没有,您可以使用 UIImageJPEGRepresentation
将其转换为 JPEG 数据。无论哪种方式,NSData 都可以直接保存到文件中。
最保存(以及稍后读取)图像数据的方法是使用 ImageIO 框架。
关于ios - 压缩包含带有加载图像的 UIImageView 的 NSKeyedArchiver 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16513158/