我有一个UIImageView的视图。它加载了jpg或png图像格式。说jpg图像版本的数据大小为100k。然后我使用NSKeyedArchiver将我的视图保存到文件中。文件大小约为3MB。如果我使用了图像的png版本,则归档文件仍然大约为3MB。
然后我使用zlib压缩存档文件。但它似乎没有太大作用。
我能做些什么让它尽可能地恢复到100k区域?
BTW:如果我使用UIWebView加载图像,那么使用图像的jpg版本,我将获得存档文件非常接近原始jpg的。
编辑:马特的回答给了我一个想法,所以这就是我最终做的事情:
注意:我的arleady使用了UIImageView的子类
NSData
encodeWithCoder
之前在[super encodeWithCoder...]
中self.image = nil
;并使用1中保存的self.image
将NSData
设置回图像数据。NSData
iVar编码为1。在initWithCoder
中,使用NSData
iVar恢复图像。
答案 0 :(得分:1)
您不需要密钥存档器。
如果图片来自你的应用内部,你已经有了图像文件,所以没有什么可以保存的;只需存档图像的名称。
如果图像来自互联网,那么您真正需要做的就是将原始图像保存在文件中(并且,可能再次归档文件的路径,以便稍后恢复)。你有一个100K的JPG图像,所以为什么不捕获它,当你拥有它?如果它作为NSData到达,那么,那就是你的数据。如果没有,您可以使用UIImageJPEGRepresentation
将其转换为JPEG数据。无论哪种方式,NSData都可以直接保存到文件中。
保存(以及稍后读取)图像数据的大多数灵活且强大的方法是使用ImageIO框架。