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

时间:2011-02-04 14:27:34

标签: iphone uiimage

我在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 个答案:

答案 0 :(得分:2)

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的评论,确保您错误地检查这些内容。您可能只是没有正确读取文件或无法编写文件。