判断图片是否缓存NSURL *url = [NSURL URLWithString:[model.content objectForKey:@"image"]];//请求网络地址数据的同步方法//因为这个方法在子线程(全局队列)中执行,所以不需要考虑死线程的问题SDWebImageManager *manager = [SDWebImageManager sharedManager];[manager diskImageExistsForURL:url];if ([manager diskImageExistsForURL:url]) {LOG(@"11111")self.speakImage = [[manager imageCache] imageFromDiskCacheForKey:url.absoluteString];}else{LOG(@"3333333")NSData *data = [NSData dataWithContentsOfURL:url];self.speakImage = [UIImage imageWithData:data];}

/**  
获取网络图片的Size, 先通过文件头来获取图片大小  
如果失败 会下载完整的图片Data 来计算大小 所以最好别放在主线程 
如果你有使用SDWebImage就会先看下 SDWebImage有缓存过改图片没有 
支持文件头大小的格式 png、gif、jpg  http://www.cocoachina.com/bbs/read.php?tid=165823 
*/ 
+(CGSize)downloadImageSizeWithURL:(id)imageURL;

//讨厌警告
-(id)diskImageDataBySearchingAllPathsForKey:(id)key{return nil;}
+(CGSize)downloadImageSizeWithURL:(id)imageURL
{NSURL* URL = nil;if([imageURL isKindOfClass:[NSURL class]]){URL = imageURL;}if([imageURL isKindOfClass:[NSString class]]){URL = [NSURL URLWithString:imageURL];}if(URL == nil)return CGSizeZero;NSString* absoluteString = URL.absoluteString;#ifdef dispatch_main_sync_safeif([[SDImageCache sharedImageCache] diskImageExistsWithKey:absoluteString]){UIImage* image = [[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:absoluteString];if(!image){NSData* data = [[SDImageCache sharedImageCache] performSelector:@selector(diskImageDataBySearchingAllPathsForKey:) withObject:URL.absoluteString];image = [UIImage imageWithData:data];}if(!image){return image.size;}}
#endifNSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL];NSString* pathExtendsion = [URL.pathExtension lowercaseString];CGSize size = CGSizeZero;if([pathExtendsion isEqualToString:@"png"]){size =  [self downloadPNGImageSizeWithRequest:request];}else if([pathExtendsion isEqual:@"gif"]){size =  [self downloadGIFImageSizeWithRequest:request];}else{size = [self downloadJPGImageSizeWithRequest:request];}if(CGSizeEqualToSize(CGSizeZero, size)){NSData* data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:URL] returningResponse:nil error:nil];UIImage* image = [UIImage imageWithData:data];if(image){
#ifdef dispatch_main_sync_safe[[SDImageCache sharedImageCache] storeImage:image recalculateFromImage:YES imageData:data forKey:URL.absoluteString toDisk:YES];
#endifsize = image.size;}}return size;
}
+(CGSize)downloadPNGImageSizeWithRequest:(NSMutableURLRequest*)request
{[request setValue:@"bytes=16-23" forHTTPHeaderField:@"Range"];NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];if(data.length == 8){int w1 = 0, w2 = 0, w3 = 0, w4 = 0;[data getBytes:&w1; range:NSMakeRange(0, 1)];[data getBytes:&w2; range:NSMakeRange(1, 1)];[data getBytes:&w3; range:NSMakeRange(2, 1)];[data getBytes:&w4; range:NSMakeRange(3, 1)];int w = (w1 << 24) + (w2 << 16) + (w3 << 8) + w4;int h1 = 0, h2 = 0, h3 = 0, h4 = 0;[data getBytes:&h1; range:NSMakeRange(4, 1)];[data getBytes:&h2; range:NSMakeRange(5, 1)];[data getBytes:&h3; range:NSMakeRange(6, 1)];[data getBytes:&h4; range:NSMakeRange(7, 1)];int h = (h1 << 24) + (h2 << 16) + (h3 << 8) + h4;return CGSizeMake(w, h);}return CGSizeZero;
}
+(CGSize)downloadGIFImageSizeWithRequest:(NSMutableURLRequest*)request
{[request setValue:@"bytes=6-9" forHTTPHeaderField:@"Range"];NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];if(data.length == 4){short w1 = 0, w2 = 0;[data getBytes:&w1; range:NSMakeRange(0, 1)];[data getBytes:&w2; range:NSMakeRange(1, 1)];short w = w1 + (w2 << 8);short h1 = 0, h2 = 0;[data getBytes:&h1; range:NSMakeRange(2, 1)];[data getBytes:&h2; range:NSMakeRange(3, 1)];short h = h1 + (h2 << 8);return CGSizeMake(w, h);}return CGSizeZero;
}
+(CGSize)downloadJPGImageSizeWithRequest:(NSMutableURLRequest*)request
{[request setValue:@"bytes=0-209" forHTTPHeaderField:@"Range"];NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];if ([data length] <= 0x58) {return CGSizeZero;}if ([data length] < 210) {// 肯定只有一个DQT字段short w1 = 0, w2 = 0;[data getBytes:&w1; range:NSMakeRange(0x60, 0x1)];[data getBytes:&w2; range:NSMakeRange(0x61, 0x1)];short w = (w1 << 8) + w2;short h1 = 0, h2 = 0;[data getBytes:&h1; range:NSMakeRange(0x5e, 0x1)];[data getBytes:&h2; range:NSMakeRange(0x5f, 0x1)];short h = (h1 << 8) + h2;return CGSizeMake(w, h);} else {short word = 0x0;[data getBytes:&word; range:NSMakeRange(0x15, 0x1)];if (word == 0xdb) {[data getBytes:&word; range:NSMakeRange(0x5a, 0x1)];if (word == 0xdb) {// 两个DQT字段short w1 = 0, w2 = 0;[data getBytes:&w1; range:NSMakeRange(0xa5, 0x1)];[data getBytes:&w2; range:NSMakeRange(0xa6, 0x1)];short w = (w1 << 8) + w2;short h1 = 0, h2 = 0;[data getBytes:&h1; range:NSMakeRange(0xa3, 0x1)];[data getBytes:&h2; range:NSMakeRange(0xa4, 0x1)];short h = (h1 << 8) + h2;return CGSizeMake(w, h);} else {// 一个DQT字段short w1 = 0, w2 = 0;[data getBytes:&w1; range:NSMakeRange(0x60, 0x1)];[data getBytes:&w2; range:NSMakeRange(0x61, 0x1)];short w = (w1 << 8) + w2;short h1 = 0, h2 = 0;[data getBytes:&h1; range:NSMakeRange(0x5e, 0x1)];[data getBytes:&h2; range:NSMakeRange(0x5f, 0x1)];short h = (h1 << 8) + h2;return CGSizeMake(w, h);}} else {return CGSizeZero;}}
}

转载于:https://www.cnblogs.com/Sucri/p/4718579.html

检测SDWebImage有没有缓存图片 IOS 获取网络图片大小相关推荐

  1. ios html清除缓存图片,iOS利用SDWebImage实现缓存的计算与清理

    一般我们项目中的缓存一般分为2大块:一个是自己缓存的一些数据;还有一个就是我们使用的SDWebImage这个第三方库给我们自动缓存的图片文件缓存了. 实际项目中会配合设置里去清理缓存, 效果截图如下: ...

  2. ios html清除缓存图片,iOS SDWebImage图片缓存处理

    前言 以前一直使用,也没有花太多时间去看看实现的机制,现在抽时间好好研究一下,只有明白里面的实现才能使用的更顺手,即便出现问题,也能很快定位问题的位置. 导入头文件#import "SDWe ...

  3. IOS 获取网络图片的大小 改变 图片色值 灰度什么的方法集合

    直接上代码了 头文件 // 图片处理 0 半灰色 1 灰度 2 深棕色 3 反色 +(UIImage*)imageWithImage:(UIImage*)image grayLevelType:(UI ...

  4. 使用开源库 SDWebImage 异步下载缓存图片(持续更新)

    source  https://github.com/rs/SDWebImage APIdoc  http://hackemist.com/SDWebImage/doc Asynchronous im ...

  5. ios html清除缓存图片,iOS,如何清理缓存的图片

    通常,在我们加载图片的时候,一般都会做缓存处理,像SDWebImage,YYWebImage都是有的,但是有缓存,当然也需要清理缓存,如果没有这个功能的话,显得app太没人性化. 获取总的缓存大小 / ...

  6. iOS 获取网络图片的尺寸

    1. 使用系统方法直接获取 NSData *data = [NSData dataWithContentsOfURL:[NSURLURLWithString:@"http://s12.mog ...

  7. iOS 获取网络图片的宽高

    有时候需要知道图片的宽高去设置相应的位置,SDWebImage里面的方法就可以直接得到: [[SDWebImageDownloader sharedDownloader]downloadImageWi ...

  8. iOS 获取本地相册图片或视频

    1.先判断iOS 相机相册的权限检测 相关链接 https://www.jianshu.com/p/8a944534e0ee 2.iOS 获取本地相册图片 iOS 获取本地相册图片一 iOS 获取本地 ...

  9. iOS获取缓存文件的大小并清除缓存

    移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为SDWebImage. 但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯.购物.阅读类 ...

最新文章

  1. pdo_mysql怎么安装_PDO_MYSQL模块的安装
  2. dyld: Library not loaded: @rpath/XCTest.framework/XCTest
  3. 【Python刷题】_2
  4. IDLE 放置奇兵 算法 地牢 记录
  5. 【动态规划】城市交通
  6. Docker安装ActiveMQ(docker-compose.yml)
  7. 都是❤️两层循环❤️的冒泡排序,选择排序,插入排序该怎么区分
  8. VC6.0多线程例程
  9. 滚动后mouseleave失效_大型调心滚子轴承偏载失效案例详情
  10. java servlet是单例吗_Servlet是单例的吗?
  11. 河南科技大学计算机科学与技术专业多少分,2016年河南科技大学计算机科学与技术专业在陕西录取分数线...
  12. QGraphicsView实现局部缩放,平移,并且能进行选中数据
  13. c++小游戏代码(5个) 免费
  14. PowerBuilder 开发的游戏(建房子)
  15. 联想计算机wifi卸载,怎么卸载联想笔记本电源管理软件
  16. 【Word】利用域代码快速实现自定义编号
  17. 三菱PLC进行连续数据采集、时序和故障追踪的方法
  18. 水星无线路由器设置虚拟服务器,水星路由器无线中继设置步骤
  19. 华为举办首届用户精英论坛,携手共创数据存储新未来
  20. 多益网络社招iq_18年多益秋招iq测试题

热门文章

  1. *【CodeForces - 202C 】Clear Symmetry (思维,找规律,特判)
  2. Coursera自动驾驶课程第15讲:GNSS and INS Sensing for Pose Estimation
  3. c#12星座速配代码_白羊座今日运势|2020/12/11
  4. php 解析mib文件,Mib库解析
  5. 清楚linux缓存文件,Linux删除文件 清除缓存
  6. python etree模块所有函数详解_Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件,封装函数...
  7. idea 升级到2020后 无法启动_升级iOS 14尝鲜后,无法降级 iOS13.5.1?
  8. c语言实验题数组逆序,【C语言】利用栈将数组中字符串逆序
  9. JQuery,ajax异步加载selectoption/option/select多选框:
  10. JAVA随机生成文件名:当前年月日时分秒+五位随机数