我在app中使用iphone库中的图像。以下方法效果很好但我的问题是当我使用NSData归档图像时。稍后在UIImage尺寸上取消存档图像时会恢复原始尺寸?
NSData *data = [[NSData alloc]init];
UIImage *reducedImage = [self imageWithImage:selectedImage scaledToSize:CGSizeMake(50,50)];
data = [NSKeyedArchiver archivedDataWithRootObject:reducedImage];
这里使用的方法是
- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
UIGraphicsBeginImageContext(newSize);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
答案 0 :(得分:0)
您是否要求恢复到原始尺寸?如果是的话,是的。 NSKeyedArchiver用于将对象转换为数据,因此更容易将它们保存在核心数据或其他存储方法中。它不是一种压缩形式。
编辑:您使用的尺寸也不是压缩形式,只是缩小了可见图像,所有图像数据仍然存在。
答案 1 :(得分:0)
这并不意味着制作像zip文件一样的压缩文件,这意味着将所有相关数据放在一起,然后将其保存到单个文件中。
NSKey的一个具体子类NSKeyedArchiver提供了一种方法 将对象(和标量值)编码为独立于体系结构 可以存储在文件中的格式。归档一组时 对象,每个对象的类信息和实例变量 被写入档案。 NSKeyedArchiver的伴侣班, NSKeyedUnarchiver,解码存档中的数据并创建一组 等同于原始集合的对象。 密钥存档与非密钥存档的区别在于所有 编码到存档中的对象和值被赋予名称或键。 解码非键控存档时,必须在中解码值 它们被编码的顺序相同。解码密钥存档时, 因为值是按名称请求的,所以可以解析值 顺序或根本没有。因此,密钥档案提供了更好的服务 支持向前和向后兼容。
给定编码值的键必须仅在范围内是唯一的 正在编码的当前对象键控存档是分层的, 所以对象A用来编码其实例变量的键不会 与对象B使用的键冲突,即使A和B是实例 同一类。但是,在单个对象中,a使用的键 子类可能与其超类中使用的键冲突。
NSArchiver对象可以将存档数据写入文件或文件 您提供的mutable-data对象(NSMutableData的一个实例)。
答案 2 :(得分:0)
UIImage drawInRect
只是将附加到UIImage的位图图像放入你给它的区域。
数据本身没有改变......
您正在寻找的是压缩。请参阅UIKit UIImagePNGRepresentation
或UIImageJPEGRepresentation
函数。