如何从文档目录加载图像/ 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];
}
答
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的评论,确保你错误检查这个东西。你可能只是没有正确读取文件或没有写入它。
如果图像已经物理保存并且可以使用预览打开,您是否已检查过(易于使用模拟器)?我能看到的是,你永远不会检查一旦从网络上下载后是否为零,是否为零。如果它是零你的代码将继续前进,但最终保存一个空文件。你应该在dimage上添加一个无效检查,并用NSLog(@“image not downloaded”)退出并提前返回。 – viggio24 2011-02-04 14:32:41
调试与Documents目录交互的另一个好方法是在Info.plist中打开文件共享。然后你可以打开iTunes浏览文件并将它们传送到你的电脑。 – Jim 2011-02-04 15:27:08