判斷圖片是否緩存
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;}} }