iOS:从网址下载图片并保存在设备中

Use*_*321 46 iphone cocoa-touch image ipad ios

我想从网址http://a3.twimg.com/profile_images/414797877/05052008321_bigger.jpg下载图片

我使用以下代码,但图像未保存在设备中.我想知道我做错了什么.

 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://a3.twimg.com/profile_images/414797877/05052008321_bigger.jpg"]];
 [NSURLConnection connectionWithRequest:request delegate:self];

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 NSString *documentsDirectory = [paths objectAtIndex:0];
 NSString *localFilePath = [documentsDirectory stringByAppendingPathComponent:@"pkm.jpg"];
 NSData *thedata = NULL;
 [thedata writeToFile:localFilePath atomically:YES];

 UIImage *img = [[UIImage alloc] initWithData:thedata];
Run Code Online (Sandbox Code Playgroud)

Fer*_*tes 102

我碰巧有你正在寻找的东西.

从URL获取图像

-(UIImage *) getImageFromURL:(NSString *)fileURL {
    UIImage * result;

    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]];
    result = [UIImage imageWithData:data];

    return result;
}
Run Code Online (Sandbox Code Playgroud)

保存图片

-(void) saveImage:(UIImage *)image withFileName:(NSString *)imageName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
    if ([[extension lowercaseString] isEqualToString:@"png"]) {
        [UIImagePNGRepresentation(image) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"png"]] options:NSAtomicWrite error:nil];
    } else if ([[extension lowercaseString] isEqualToString:@"jpg"] || [[extension lowercaseString] isEqualToString:@"jpeg"]) {
        [UIImageJPEGRepresentation(image, 1.0) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"jpg"]] options:NSAtomicWrite error:nil];
    } else {
        NSLog(@"Image Save Failed\nExtension: (%@) is not recognized, use (PNG/JPG)", extension);
    }
}
Run Code Online (Sandbox Code Playgroud)

加载图片

-(UIImage *) loadImage:(NSString *)fileName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
    UIImage * result = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.%@", directoryPath, fileName, extension]];

    return result;
}
Run Code Online (Sandbox Code Playgroud)

如何

//Definitions
NSString * documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

//Get Image From URL
UIImage * imageFromURL = [self getImageFromURL:@"http://www.yourdomain.com/yourImage.png"];

//Save Image to Directory
[self saveImage:imageFromURL withFileName:@"My Image" ofType:@"png" inDirectory:documentsDirectoryPath];

//Load Image From Directory
UIImage * imageFromWeb = [self loadImage:@"My Image" ofType:@"png" inDirectory:documentsDirectoryPath];
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在下载一个期望在本地保存它而不仅仅是显示它的图像,那么最好立即使用[data writeToFile:options:error:]创建文件,而不是先将它保存在UIImage对象中.这样,您将避免重新压缩图像并丢失过程中的所有EXIF数据. (9认同)
  • 如果您喜欢我的代码,请随时下载我的开源项目Atom,其中包括上述方法等等.(https://github.com/fer94/atom) (2认同)

Alf*_*nso 36

如果设置theDatanil,您希望它写入磁盘的内容是什么?

您可以使用的是NSData* theData = [NSData dataWithContentsOfURL:yourURLHere];从磁盘加载数据,然后使用保存它writeToFile:atomically:.如果您需要对加载过程进行更多控制或将其置于后台,请查看NSURLConnection相关指南的文档和相关指南.


Use*_*321 9

这是从url下载图像并将该图像保存在设备中的代码,是参考链接.

 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://a3.twimg.com/profile_images/414797877/05052008321_bigger.jpg"]];
 [NSURLConnection connectionWithRequest:request delegate:self];

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 NSString *documentsDirectory = [paths objectAtIndex:0];
 NSString *localFilePath = [documentsDirectory stringByAppendingPathComponent:@"pkm.jpg"];
 NSData *thedata = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://a3.twimg.com/profile_images/414797877/05052008321_bigger.jpg"]];
 [thedata writeToFile:localFilePath atomically:YES];
Run Code Online (Sandbox Code Playgroud)