图片智能下载库(TBCDNImage)是基于手机淘宝开放的整套移动端图片下载、处理、展示开发库,主要包括以下三个核心组件:
图片库的特性
1)图片库依赖包
在media.cdnimage.libs文件夹有Reachability.framework和WebP.framework两个依赖包,用于网络情况分析和webp格式解码
2)图片库源码
在media.sdk.ios.demo.isv/Classes文件夹里面有RegexKitLite,SDWebImage和TBCDNImage文件夹,分别是正则表达式识别,封装过的SDWebImage开源库和TBCDNImage库。
运行项目之后,点击图片下载优化库栏。点击示例图片。可以看见使用了图片库前后的url和压缩比。
初始化只允许一次。
1). 引入头文件
#import "TBCDNImage.h"
2). 使用UIImageView Category 加载图片
/** * 添加参数选项 * * @param url 图片请求调用 扩展UIImageView方法 * @param placeholder 占位图 * @param imageSize 指定图片大小(注意:一般情况下不需要指定或可以直接设置为 CGSizeZero。 当你调用接口时 imageView 的 frame 还未初始化,用这个指定。 指定时必须自己处理 Retina Scale) * @param adaptType: 指定一些个性化的适配选项 ImageAdapt_None, // 默认选项, 无 ImageAdapt_AutoCut, // 自动裁剪表示图片先按短边缩略,从缩略的目标图片裁剪出中间部分得到对应指定高度和宽度的目标缩略图。 ImageAdapt_ShortSideScale, // 短边优先缩略 ImageAdapt_LongSideScale, // 长边优先缩略 ImageAdapt_PlayGif * @param options 参数选项 * @param progressBlock 进度回调 */ - (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder imageSize:(CGSize)imageSize adaptType:(ImageAdaptOptions)adaptType options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock
注意:需要特殊提醒的是,一般情况下请不要使用指定 imageSize ,如果需要用到详细接口不得不带上,可以用 CGSizeZero 忽略;如果必须指定 imageSize,则需要自己处理 Retina Scale。
UIImageVIew :
// init imageView UIImageView *imageView = [[UIImageView alloc]init]; imageView.frame = CGRectMake(0, 0, 100, 100); // url NSURL *url = [[NSURL alloc]initWithString:@"http://imagedemo.image.alimmdn.com/example.jpg"]; /** * 基本图片请求调用 * * @param url 图片请求链接 */ [imageView setImageWithCDNURL:url completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { // do complete ... }]; /** * 添加占位图 * * @param url 图片请求链接 * @param placeholder 占位图 */ [imageView setImageWithCDNURL:url placeholder:[UIImage imageNamed:@"xxxx.jpg"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { // do complete ... }]; /** * 添加参数选项 * * @param url 图片请求链接 * @param placeholder 占位图 * @param imageSize 指定图片大小(注意:一般情况下不需要指定或可以直接设置为 CGSizeZero。 当你调用接口时 imageView 的 frame 还未初始化,用这个指定。 指定时必须自己处理 Retina Scale) * @param adaptType: 指定一些个性化的适配选项 ImageAdapt_None, // 默认选项, 无 ImageAdapt_AutoCut, // 自动裁剪表示图片先按短边缩略, // 从缩略的目标图片裁剪出中间部分得到对应指定高度和宽度的目标缩略图。 ImageAdapt_ShortSideScale, // 短边优先缩略 ImageAdapt_LongSideScale, // 长边优先缩略 ImageAdapt_PlayGif * @param options 参数选项 * @param progressBlock 进度回调x */ [imageView setImageWithCDNURL:url placeholder:nil imageSize:CGSizeZero adaptType:ImageAdapt_None progress:^(NSInteger receivedSize, NSInteger expectedSize) {} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { // do complete logic... }];
UIButton:
-(void) loadButtonImage{ // init imageView UIImageView *imageView = [[UIImageView alloc]init]; imageView.frame = CGRectMake(0, 0, 100, 100); // url NSURL *url = [[NSURL alloc]initWithString:@"http://imagedemo.image.alimmdn.com/example.jpg"]; //UIBUtton加载 UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 600, 200, 200)]; /** * 添加progress回调 * * @param url 图片请求链接 * @param state button状态 * @param placeholder 占位图 * @param imageSize 指定图片大小 * (注意:一般情况下不需要指定或可以直接设置为 CGSizeZero。当你调用接口时 * imageView 的 frame 还未初始化,用这个指定。指定时必须自己处理 Retina Scale) * * @param adaptType: 指定一些个性化的适配选项 ImageAdapt_None, // 默认选项, 无 ImageAdapt_AutoCut, // 自动裁剪表示图片先按短边缩略, // 从缩略的目标图片裁剪出中间部分得到对应指定高度和宽度的目标缩略图。 ImageAdapt_ShortSideScale, // 短边优先缩略 ImageAdapt_LongSideScale, // 长边优先缩略 ImageAdapt_PlayGif * @param options 参数选项 * @param progressBlock 进度回调 */ [button setImageWithURL:url forState:UIControlStateNormal placeholderImage:[UIImage imageNamed:@"xxxx.jpg"] imageSize:CGSizeZero adaptType:ImageAdapt_None options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { // do complete logic... }]; }
BackgroudDownload:
-(void)backgroudDownload{ // url NSURL *url = [[NSURL alloc]initWithString:@"http://imagedemo.image.alimmdn.com/example.jpg"]; //非视图静默下载,completed为空时不下载 /** * 静默下载图片接口 * 对应添加裁切类型 * * @param url 图片url * @param imageSize 图像大小(注意: 如果要指定大小,需要自己处理 Retina Scale,不然可以直接用 CGSizeZero 忽略) * @param cutType 指定裁剪类型 * @param options 选项参数 * @param progress 进度回调 */ [[SDWebImageManager sharedManager] downloadWithURL:url imageSize:CGSizeMake(200, 200) adaptType:ImageAdapt_None options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { // now image download ok. }]; }
ParseURL:
/** * 上面DEMO的调用会默认调用这个 parseImageURLForCDNURL * * Native 图片 URL 解析适配 接口 * * @param url 图片请求链接 * @param module 调用组件模块名 * @param imageSize 指定图片大小 (注意:指定图片大小时为实际尺寸,不会做 Retina 判断, 只有视图尺寸才会判断。比如:视图大小100x100时, Retina 下图片大小200x200,非 Retina 下为100x100) * @param viewSize 指定视图大小 * @param adaptType: 指定一些个性化的适配选项 ImageAdapt_None, // 默认选项, 无 ImageAdapt_AutoCut, // 自动裁剪表示图片先按短边缩略,从缩略的目标图片裁剪出中间部分得到对应指定高度和宽度的目标缩略图。 ImageAdapt_ShortSideScale, // 短边优先缩略 ImageAdapt_LongSideScale, // 长边优先缩略 ImageAdapt_PlayGif * // 播放gif动画, (默认情况会进行格式转换,节省流量,gif变成jpg或webp) * @return 解析好的符合CDN规则的URL */ -(void) parseURL{ // url NSURL *url = [[NSURL alloc]initWithString:@"http://imagedemo.image.alimmdn.com/example.jpg"]; //URL解析 NSURL *parsedURL = [TBCDNImageURLParser parseImageURLForCDNURL:url module:nil imageSize:CGSizeZero viewSize:CGSizeMake(200, 200) adaptType:ImageAdapt_None]; NSLog(@"%@", parsedURL.absoluteString); }