IOS图片库

更新时间:2016/02/18 访问次数:15292

1、简介

图片智能下载库(TBCDNImage)是基于手机淘宝开放的整套移动端图片下载、处理、展示开发库,主要包括以下三个核心组件:

  • TBCDNImage是针对CDN的拼接处理方案。
  • SDWebImage是封装自开源库,作为网络下载和缓存处理的核心部分。
  • WebP是针对WebP格式的解码优化。

图片库的特性

  • 自动适配网络条件,针对不同网络下载不同质量的图片。
  • 自动适配view大小下载对应大小图片,避免像素浪费。
  • 支持webp格式解析,可以减小下载的流量。 与原生Google的WebP库相比有性能上的优势,减少cpu使用和电量消耗
  • 定制化SDWebImage,提高下载速度和缓存命中率。

2、DEMO下载

下载地址

3、DEMO介绍

1. 文件结构

1)图片库依赖包
在media.cdnimage.libs文件夹有Reachability.framework和WebP.framework两个依赖包,用于网络情况分析和webp格式解码

2)图片库源码
在media.sdk.ios.demo.isv/Classes文件夹里面有RegexKitLite,SDWebImage和TBCDNImage文件夹,分别是正则表达式识别,封装过的SDWebImage开源库和TBCDNImage库。

2. 功能

运行项目之后,点击图片下载优化库栏。点击示例图片。可以看见使用了图片库前后的url和压缩比。

4、使用

1、初始化[TBCDNImageConfigCenter sharedConfigCenter] setupDefaultConfig];

初始化只允许一次。

2、视图类(UIImageView,UIButton)加载

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。

3. 调用示例

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);
	}

FAQ

关于此文档暂时还没有FAQ
返回
顶部