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

iPhone是否压缩保存在我的应用程序文档目录中的图像?,iphone,Iphone,我们正在缓存从服务器下载的图像。我们从ASIHTTPRequest回调获取数据,如下所示: #pragma mark ASIHTTPRequest callback -(void)imageDownloadFinished:(ASIHTTPRequest*)aRequest { NSString* fileName = aRequest.url.path.lastPathComponent; [self imageDidArrive:[aRequest responseData

我们正在缓存从服务器下载的图像。我们从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];
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];
我们将图像数据写入本地存储器,如下所示:

#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];
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];
下载的图像总是预期大小,大约45-85KB

稍后,我们从缓存中读取图像,如下所示:

#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];
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上

如果我正确读取了您的代码,您使用的是NSData方法writeToFile:atomicaly:写入文件。它对NSData对象的内容进行精确的逐字节写入


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

我们有了解决方案。当手机在3G网络上运行时,O2善意地介入并对我们的图像应用额外的JPG压缩,使它们看起来格外可怕


看看这个。

顺便说一句,我正在调试不是我自己的代码,所以我很愿意相信我错过了一些东西!anImageData是如何创建的?例如,您是否使用UIImageJPEGresentation?它由ASIHTTPRequest回调提供,以便在图像下载时成功:pragma mark ASIHTTPRequest回调-voidimageDownloadFinished:ASIHTTPRequest*aRequest;{NSString*fileName=aRequest.url.path.lastPathComponent;[self-imagedidarrim:[aRequest-responseData]forFileName:fileName];}并且图像是JPGs。肯定发生了什么事情!但也许它在我尚未发现的代码的某个角落。