如何从文档目录加载图像/ IPHONE

问题描述:

我在iphone中存在互联网连接时保存图像。 现在我想加载保存在文档目录中的图像。我得到的路径,但图像不显示。请帮助我。 在此先感谢。如何从文档目录加载图像/ IPHONE

这里是我的代码:

+(UIImage *) getImagewithName:(NSString*) imagepath 
{ 
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

    UIImage *gimage=[UIImage imageWithContentsOfFile: [NSString stringWithFormat:@"%@/%@",docDir,imagepath]]; 

    NSLog(@"%@/%@",docDir,imagepath); 

    return gimage; 
} 

+(void)DownloadImage:(NSString*)ImagePath { 
    if ([ImagePath isEqualToString:@""]) 
     return; 

    UIImage *dimage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http:/uploads/%@",ImagePath]]]]; 
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSLog(@"pathIMAGEPATHS:::::::%@",ImagePath); 
    NSLog(@"path:::::::%@",docDir); 
    NSArray *patharr=[ImagePath componentsSeparatedByString:@"."]; 
    NSString* Ext=[NSString stringWithFormat: @"%@",[patharr objectAtIndex:1]]; 
    NSString *FilePath = [NSString stringWithFormat: [NSString stringWithFormat:@"%@/%@",docDir,ImagePath]]; 
    if([Ext isEqualToString:@"png"]) 
    { 
     NSLog(@"saving png"); 

     NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(dimage)]; 
     [data1 writeToFile:FilePath atomically:YES]; 
    } 
    else if([Ext isEqualToString:@"jpeg"]) 
    { 
     NSLog(@"saving jpeg"); 
     //NSString *jpegFilePath = [NSString stringWithFormat:@"%@/test.jpeg",docDir]; 
     NSData *data2 = [NSData dataWithData:UIImageJPEGRepresentation(dimage, 1.0f)];//1.0f = 100% quality 
     [data2 writeToFile:FilePath atomically:YES]; 
    } 
    else 
    { 
     NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(dimage)]; 
     [data1 writeToFile:FilePath atomically:YES]; 

    } 
    NSLog(@"saving image done"); 

    [dimage release]; 

} 
+1

如果图像已经物理保存并且可以使用预览打开,您是否已检查过(易于使用模拟器)?我能看到的是,你永远不会检查一旦从网络上下载后是否为零,是否为零。如果它是零你的代码将继续前进,但最终保存一个空文件。你应该在dimage上添加一个无效检查,并用NSLog(@“image not downloaded”)退出并提前返回。 – viggio24 2011-02-04 14:32:41

+0

调试与Documents目录交互的另一个好方法是在Info.plist中打开文件共享。然后你可以打开iTunes浏览文件并将它们传送到你的电脑。 – Jim 2011-02-04 15:27:08

viggio24使得一个好点。但是,此代码看起来非常复杂,难以置信的简单。你为什么要下载数据,然后把它变成图像,只是把它变成数据,最后写出来呢?然后你再读一遍,制作一个新的图像?为什么不把文件下载到磁盘并阅读? UIImage将为您完成所有管理PNG和JPEG的工作。例如:

+(void)downloadImage:(NSString*)imagePath { 
    if ([imagePath isEqualToString:@""]) 
     return; 

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[@"http://110.234.132.132/MBCMcAdmin/uploads" stringByAppendingPathComponent:imagePath]]]; 
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    [data writeToFile:[docDir stringByAppendingPathComponent:imagePath] atomically:YES]; 
} 

尽管这在大多数情况下仍然是一个可怕的想法,因为它阻止了调用线程。最好用NSURLDownload这样做,它会在后台为你做所有事情,并告诉你什么时候完成。

我会简化代码,然后按照viggio24的评论,确保你错误检查这个东西。你可能只是没有正确读取文件或没有写入它。