我有一个NSMutableDicitionary包含两个NSStrings和一个NSImage,我试图写入一个文件。但是输出文件与输入图像文件(88kB到1.1MB)相比是巨大的。图像通过Image Well拖放加载。
我的第一次尝试是:
NSImage * image = _imageView.image;
[dictionary setObject:image forKey:@"Image"];
[NSKeyedArchiver archiveRootObject:dictionary toFile:filePath];
结果:1.1MB
第二次尝试:
NSImage * image = _imageView.image;
NSData * imageData = [image TIFFRepresentation];
NSBitmapImageRep * encodedImage = [NSBitmapImageRep imageRepWithData:imageData];
[dictionary setObject:encodedImage forKey:@"Image"];
[NSKeyedArchiver archiveRootObject:dictionary toFile:filePath];
结果:仍为1.1MB
起初我认为NSBitmapImage会将图像保持为(至少相对)压缩格式,但文件大小不会有一点差异。
我应该如何将NSMutable字典写入文件,以使其不超过初始图像文件大小?或者我应该如何在图像中有效地存储图像?
我不知道这是否重要,但原始格式是png。
答案 0 :(得分:1)
当您将图像拖放到图像视图中时,它会作为位图(每个像素的颜色数据)加载到NSImage中。它不会像您放入其中的原始图像那样被压缩(在您的情况下为PNG)。 PNG使用无损压缩,其数据占用空间在大多数情况下小于图像的未压缩位图或TIFF表示。
然后,当您请求图像的TIFF表示时,它与您加载到其中的原始PNG图像无关,除了像素数据本身。
如果要以压缩格式存储图像或保留原始图像,可以尝试以下操作之一:
TIFFRepresentationUsingCompression:factor:
请求压缩的TIFF表示。将仍然是不同的格式,您将丢失所有元数据