iPhone是否压缩保存在应用程序文档目录中的图像?

时间:2010-03-18 11:22:23

标签: iphone

我们正在缓存从我们的服务器下载的图像。我们从ASIHTTPRequest回调中获取数据,如下所示:

#pragma mark ASIHTTPRequest callback
-(void)imageDownloadFinished:(ASIHTTPRequest*)aRequest
{
    NSString* fileName = aRequest.url.path.lastPathComponent; 
    [self imageDidArrive:[aRequest responseData] forFileName:fileName];
}

我们将图像数据写入本地存储,如下所示:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
 NSString *documentsDirectory = [paths objectAtIndex:0] ; 
 NSString* folder = [[documentsDirectory stringByAppendingPathComponent:@"flook.images"] retain];
        NSString* fileName = [folder stringByAppendingFormat:@"/%@", aBaseFilename];

 BOOL writeSuccess = [anImageData writeToFile:fileName atomically:NO];

下载的图像总是预期的大小,大约45-85KB。

稍后,我们从缓存中读取图像:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
 NSString *documentsDirectory = [paths objectAtIndex:0] ; 
 NSString* folder = [[documentsDirectory stringByAppendingPathComponent:@"flook.images"] retain];
        NSString* fileName = [folder stringByAppendingFormat:@"/%@", aBaseFilename];

 image = [UIImage imageWithContentsOfFile:fileName];

有时,从此缓存读取返回的图像要小得多,因为它们压缩得更多 - 大约5-10KB。操作系统是否已完成此操作?

编辑 - 事实证明我们正在下载小图片,因此问题不在iPhone上

2 个答案:

答案 0 :(得分:0)

如果我正确地读取你的代码,你正在使用NSData方法writeToFile:atomically:写入文件。这样就可以对NSData对象的内容进行精确的逐字节写入。

似乎NSData对象是直接从HTTP响应的内容创建的,所以答案是“否”,不应该发生任何压缩。

答案 1 :(得分:0)

我们有解决方案。当手机在3G网络上运行时,O2会介入并对我们的图像应用额外的JPG压缩,这样它们看起来更加可怕。

请参阅此post on the UK 3G forum