iOS如何保存下载GIF图片

作者: la0fu | 来源:发表于2016-10-28 18:16 被阅读339次

    对于大多数移动端开发者,经常会和图片打交道,其中pngjpg是开发者经常会碰到的图片类型。然而,对于gif图片,由于iOS系统不支持直接处理gif动图,处理起来会麻烦一些。本文将讨论如何从网络下载并保存gif到系统目录。

    业务需求:

    需要从网络下载gif图片并保存到系统目录,并展示gif图片

    一般做法:

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue, ^{
        NSString *imgUrl = @"xxxx";
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:imgUrl]];
        if (data) {
            //以图片形式保存data到文件系统
        }
    });
    
    

    这时候如果imgUrlpngjpg图片的地址,我们可以用以下代码保存图片

    UIImage *image = [UIImage imageWithData:data];
    BOOL success = [UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];
    if (success) {// 保存成功
        NSLog(@"save success");
    } else {
        NSLog(@"save failed");
    }
    
    

    然而对于gif格式图片,如果用上面的方法保存,只会得到一张静态图。iOS也没有提供类似UIImageGIFRepresentation的方法,支持直接保存gif到系统目录。

    解决方案:

    通过NSURLSessionDownloadTask获取gif图片

    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
    NSURL *url = [NSURL URLWithString:fileUrl];
    NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (error) {
            NSLog(@"gif download error:%@", error);
        } else {
             NSLog(@"gif download success, file path:%@",location.path);  
             //图片下载已完成,处理数据      
        }
    }];
    [task resume];
    

    通过NSURLSessionDownloadTask,我们成功地下载了gif图片。通过成功回调里面的location.path,我们可以获取到下载后的文件位置。注意,这个文件是在app缓存目录,而且后缀名为.tmp,我们可以根据业务需求复制到app其它目录。

    结论:

    类似的,通过NSURLSessionDownloadTask,我们可以下载其它iOS系统本身不支持的文件类型,比如.doc.pdf等。

    相关文章

      网友评论

        本文标题:iOS如何保存下载GIF图片

        本文链接:https://www.haomeiwen.com/subject/ndyeuttx.html