iOS如何保存下载GIF图片
对于大多数移动端开发者,经常会和图片打交道,其中png
和jpg
是开发者经常会碰到的图片类型。然而,对于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 = https://www.it610.com/article/[NSData dataWithContentsOfURL:[NSURL URLWithString:imgUrl]];
if (data) {
//以图片形式保存data到文件系统
}
});
这时候如果
imgUrl
是png
或jpg
图片的地址,我们可以用以下代码保存图片UIImage *image = [UIImage imageWithData:data];
BOOL success = [UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];
if (success) {// 保存成功
NSLog(@"save success");
} else {
NSLog(@"save failed");
}
【iOS如何保存下载GIF图片】然而对于
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
等。推荐阅读
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 如何寻找情感问答App的分析切入点
- 2020-04-07vue中Axios的封装和API接口的管理
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- java中如何实现重建二叉树
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程