您的位置:首页 > 理论基础 > 计算机网络

iOS下载网络图片并存储到沙盒目录下

2017-05-04 11:29 393 查看
//调用下面的方法model为一个实体类,可以传递一个网址

model.urlId
为每一个网址图片的唯一标示,避免重复,如果重复会将原来图片覆盖

model.urlStr = @"http://img1.126.net/channel6/2016/022471/0805/2.jpg?dpi=6401136"

-(void)getData:(ADModel*)model{

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

    DownloadImage([NSURL
URLWithString:model.urlStr],
^(UIImage *image) {

        [self
saveImage:image withFileName:model.urlId
ofType:@"jpg"
inDirectory:documentsDirectoryPath];

    }, ^{

        

    });

}

//获取网址并将图片转换成NSData 并且转成image通过block返回image如果失败返回错误信息

void DownloadImage ( NSURL * URL,
void (^imageBlock)(UIImage * image),
void (^errorBlock)(void) )

{

    dispatch_async(
dispatch_get_global_queue(
DISPATCH_QUEUE_PRIORITY_DEFAULT,
0 ), ^(void)

           {

               NSData * data = [[NSData
alloc] initWithContentsOfURL:URL];

               UIImage * image = [[UIImage
alloc] initWithData:data];

               dispatch_async(
dispatch_get_main_queue(), ^(void){

                   if( image !=
nil )

                   {

                       imageBlock( image );

                   } else {

                       errorBlock();

                   }

               });

           });

}

//将图片存储到沙盒目录下存储成jpg形式

-(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 {

        //ALog(@"Image Save Failed\nExtension: (%@) is not recognized, use (PNG/JPG)", extension);

        NSLog(@"文件后缀不认识");

    }

}
//获取图片 model1.urlId获取图片

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

    NSString *filestr = [NSString
stringWithFormat:@"/%@.jpg",_model1.urlId
];

    NSString
*newstr = [NSString
stringWithFormat:@"%@%@",documentsDirectoryPath,filestr];

    NSData
*imageData = [NSData
dataWithContentsOfFile:newstr];

    UIImage* image = [[UIImage
alloc]
initWithData:imageData];

    _imageview.image = image;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: