iOS 加载图片查看大图失真

一般加载iOS得网络图片用的很好的第三方框架是SDWebImage,然后我们会有一种点击查看大图得需求。一般这种需求接口会返回两种字段,一种是压缩图片地址A。一种是原图地址B。

那么问题就来了,一般用原图地址加载图片出来后,图片会有一定比例得失真。(我感觉没有问题,通常就是查看大图会加载原图地址。可是人家说了咱们的解决,那么怎么解决呢。)我发现给原图下载下来后在加载出来,没有问题。(我感觉都一样。)

话不多说,直接上代码

1、检测本地是否下载过改图片

NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) objectAtIndex:0];
    NSString *path = [cachesPath stringByAppendingString:[NSString stringWithFormat:@"/%lu.%@",(unsigned long)[url hash],url.pathExtension]];
    NSData *data = [NSData dataWithContentsOfFile:path];
    if (data == nil) {//需要下载
        [self writeToCacheWithUrl:url];
    }
//下载到本地
- (void)writeToCacheWithUrl:(NSString *)url {
    dispatch_queue_t quest = dispatch_queue_create("down", DISPATCH_QUEUE_SERIAL);
    
    dispatch_async(quest, ^{
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
        //创建文件管理器
        NSFileManager *fileManager = [NSFileManager defaultManager];
        //获取document路径
        NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES) objectAtIndex:0];
        [fileManager createDirectoryAtPath:[cachesPath stringByAppendingString:@"/Caches"] withIntermediateDirectories:YES attributes:nil error:nil];
        //写入路径
        NSString *path = [cachesPath stringByAppendingString:[NSString stringWithFormat:@"/%lu.%@",(unsigned long)[url hash],url.pathExtension]];
        
        [data writeToFile:path atomically:YES];
        
    });
}

开个分线程,缓存到本地,然后从本地取出来,编码一下,然后再绘制出来。不知道这么处理是否真的与原来的直接加载的那种处理清晰度不一样。

2、取出来,重新绘制

NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) objectAtIndex:0];
        NSString *path = [cachesPath stringByAppendingString:[NSString stringWithFormat:@"/%lu.%@",(unsigned long)[imageUrl hash],imageUrl.pathExtension]];
        
        NSData *data = [NSData dataWithContentsOfFile:path];
        if (data == nil) {
            [MBProgressHUD mj_showError:@"正在下载,请稍候"];
            return;
        }
        UIImage *result = [UIImage imageWithData:data];

如有问题,下边留言,大家共同进步!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,883评论 1 32
  • 7.1 压缩图片 一、基础知识 1、图片的格式 jpg:最常见的图片格式。色彩还原度比较好,可以支持适当压缩后保持...
    AndroidMaster阅读 7,353评论 0 13
  • 苹果官方加载大图片例子 首先得知道图片加载到内存中的大小怎么计算 如果是位图,则位图多大则加载到内存中所占用的大小...
    飘金阅读 14,586评论 6 62
  • 20181123读《杀死一只知更鸟》第二十三章章~第三十一章 完结“现在人还不到担心的时候。”这是阿迪克斯对孩子们...
    湖水涟漪阅读 2,405评论 0 0
  • 近日,由中宣部、文化部、国家广电总局等十六个部位联合发起,中国电影制片人协会、中国电影评论协会等多家单位主办,第五...
    玫瑰恩阅读 3,342评论 0 0

友情链接更多精彩内容