typedef NS_ENUM( NSUInteger, BDAnimatedImageAnimationType )
动图播放效果。
| 类型 | 值 | 说明 |
|---|---|---|
| BDAnimatedImageAnimationTypeOrder | 0 | 顺序播放(123-123-123-123)。 |
| BDAnimatedImageAnimationTypeReciprocating | 1 | 循环往复播放(123-321-123-321)。 |
typedef NS_ENUM( NSUInteger, BDImageCodeType )
图片格式。
| 类型 | 值 | 说明 |
|---|---|---|
| BDImageCodeTypeUnknown | 0 | 图片格式未知。 |
| BDImageCodeTypeJPEG | 1 | jpeg 格式的图片。 |
| BDImageCodeTypeJPEG2000 | 2 | jpeg2000 格式的图片。 |
| BDImageCodeTypeTIFF | 3 | tiff 格式的图片。 |
| BDImageCodeTypeBMP | 4 | bmp 格式的图片。 |
| BDImageCodeTypeICO | 5 | ico 格式的图片。 |
| BDImageCodeTypeICNS | 6 | icns 格式的图片。 |
| BDImageCodeTypeGIF | 7 | gif 格式的图片。 |
| BDImageCodeTypePNG | 8 | png 格式的图片。 |
| BDImageCodeTypeWebP | 9 | webp 格式的图片。 |
| BDImageCodeTypeHeic | 10 | heic 格式的图片(ftypheic、ftypheix、ftyphevc、ftyphevx)。 |
| BDImageCodeTypeHeif | 11 | heif 格式的图片(mif1、msf1)。 |
| BDImageCodeTypeAVIF | 12 | avif 格式的图片。 |
| BDImageCodeTypeVVIC | 13 | vvic 格式的图片。 |
| BDImageCodeTypeVVIS | 14 | vvis 格式的图片。 |
@interface BDImageMetaInfo : NSObject
图片基础信息。
| 类型 | 名称 |
|---|---|
| NSUInteger | fileSize |
| NSUInteger | memoryFootprint |
| NSUInteger | width |
| NSUInteger | height |
| NSString* | webURL |
| UIView* | requestView |
| id | userInfo |
| NSUInteger | frameCount |
| BOOL | previousNeedImage |
@property (nonatomic, assign) NSUInteger fileSize;
下载后文件大小,单位:byte。
@property (nonatomic, assign) NSUInteger memoryFootprint;
预测解码结束后占用的最大内存,单位:byte。
注意
实际计算公式为:memoryFootprint = width * height * imageCount * 4
@property (nonatomic, assign) NSUInteger width;
图片的宽度,单位:像素 ( pixel, px )。
@property (nonatomic, assign) NSUInteger height;
图片的高度,单位:像素 ( pixel, px )。
@property (nonatomic, copy) NSString *webURL;
图片的下载地址。
@property (nonatomic, weak, nullable) UIView *requestView;
图片对应的视图。
注意
可能是 UIImageView、BDImageView、UIButton 等,根据请求方式的不同可能为空。
@property (nonatomic, nullable) id userInfo;
业务在请求图片时,通过 BDWebImageRequestConfig 传入的数据。
注意
该处回调数据不在主线程,请务必注意线程同步。
@property (nonatomic, assign) NSUInteger frameCount;
图片的帧数。
@property (nonatomic, assign) BOOL previousNeedImage;
标记位,表示采用 BDWebImageManager.shouldDecodeImageBlock 进行拦截前当前图片是否需要解码。
注意
BDImageMetaInfo 是 BDWebImageManager.shouldDecodeImageBlock 的参数,业务可在 block 中自行通过 BDImageMetaInfo 判断是否拦截解码,拦截解码的实际效果和下载图片失败相同,详见 BDWebImageManager。
@interface BDWebImageRequestConfig : NSObject
图片请求的配置。
| 类型 | 名称 |
|---|---|
| NSString* | requestKey |
| CGSize | sizeLimit |
| NSUInteger | memoryLimit |
| CFTimeInterval | timeoutInterval |
| NSString* | cacheName |
| BDBlurHashConfig* | blurHashConfig |
| BDWebImageCryptoKey* | cryptoKey |
| BDBaseTransformer* | transformer |
| id | userInfo |
| NSString* | sceneTag |
| NSUInteger | randomSamplingPointCount |
| NSTimeInterval | transitionDurationPrecisely |
| NSDictionary<NSString*,NSString*>* | requestHeaders |
| NSDictionary<NSString*,NSString*>* | customParam |
| NSUInteger | requestFrom |
| 返回 | 名称 |
|---|---|
| void | setDefaultTransitionDuration: |
@property (nonatomic, nullable, copy) NSString *requestKey;
请求的标识符,用于标识相同的源数据(相等于磁盘缓存中的 sourceKey)。
注意
如果设置该值将会覆盖原有的由 URL 生成 requestKey 的逻辑。
@property (nonatomic, assign) CGSize sizeLimit;
当前图片期望请求的大小,用于降采样,单位是 point,对应在屏幕上的点,内部会自行计算像素。
@property (nonatomic, assign) NSUInteger memoryLimit;
降采样图片内存大小,单位是 byte,优先级低于 sizeLimit。
@property (nonatomic, assign) CFTimeInterval timeoutInterval;
网络请求的超时时间,传入 0 使用默认超时时间。
@property (nonatomic, nullable, copy) NSString *cacheName;
当前期望的缓存实例。
@property (nonatomic, copy, nullable) BDBlurHashConfig *blurHashConfig;
BlurHash 功能的配置。
注意
BlurHash 功能的优先级低于 placeholder。
@property (nonatomic, strong, nullable) BDWebImageCryptoKey *cryptoKey;
加密图片的密钥配置,请求加密图片时必须设置此项,否则无法加载图片。
@property (nonatomic, nullable, strong) BDBaseTransformer *transformer;
图片加工工具,可以在图片下载后再次对图片进行加工。
@property (nonatomic, nullable, strong) id userInfo;
业务方指定传入的信息。
@property (nonatomic, nullable, copy) NSString *sceneTag;
业务方设置的 app 场景标识。
注意
该处优先级高于 sceneTagURLFilterBlock 解析 url 生成的场景标识。
@property (nonatomic, assign) NSUInteger randomSamplingPointCount;
随机采样解码后图片的像素个数,用于判断图片是否黑白屏等信息,默认值为 30。
@property (nonatomic, assign) NSTimeInterval transitionDurationPrecisely;
BDImageRequestSetAnimationFade 的动画持续时间。
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> *requestHeaders;
设置每个图片请求单独的 http headers。
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> *customParam;
自定义上报数据。每个图片请求的过程中,您可以夹带业务自定义数据,该部分数据会被上报到 image_monitor_v2 性能日志。
注意
json path 访问时 $.customParam。
@property (nonatomic, assign) NSUInteger requestFrom;
图片请求的来源。
0:代表 SDK1:代表 Hybrid+ (void)setDefaultTransitionDuration:(CGFloat)duration;
自定义 transitionDurationPrecisely 属性的默认值,默认值为 0.2 秒。
传入参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| duration | CGFloat | 动画的持续时间。 |
typedef NS_OPTIONS( NSInteger, BDImageRequestOptions )
图片请求相关设置,如果多个请求设置有交叉,以逻辑或的方式生效。
| 类型 | 值 | 说明 |
|---|---|---|
| BDImageRequestDefaultPriority | 0 | 网络下载优先级:使用默认优先级。 |
| BDImageRequestLowPriority | 1 << 0 | 网络下载优先级:使用较低优先级。 |
| BDImageRequestHighPriority | 1 << 1 | 网络下载优先级:使用较高优先级。 |
| BDImageRequestIgnoreMemoryCache | 1 << 2 | 缓存:请求图片的时刻不查找内存缓存。 |
| BDImageRequestIgnoreDiskCache | 1 << 3 | 缓存:请求图片的时刻不查找磁盘缓存。 |
| BDImageRequestNotCacheToMemory | 1 << 4 | 缓存:下载新图片之后不存储内存缓存。 |
| BDImageRequestNotCacheToDisk | 1 << 5 | 缓存:下载新图片之后不存储磁盘缓存。 |
| BDImageRequestIgnoreCDNDowngrade | 1 << 22 | 缓存:忽略图片服务的 CDN 降级策略(命中 CDN 降级策略会导致没有磁盘缓存)。 |
| BDImageRequestIgnoreCache | BDImageRequestIgnoreMemoryCache | BDImageRequestIgnoreDiskCache | 缓存:请求图片的时刻不查找内存缓存以及磁盘缓存。 |
| BDImageRequestNotCacheToMemery | BDImageRequestNotCacheToMemory | 缓存:请求图片的时刻不查找内存缓存。 |
| BDImageRequestNeedCachePath | 1 << 7 | 请求返回结果:强制图片请求必须要返回 NSData 原始数据(默认情况下查找到内存缓存,是不会返回图片原始数据)。 |
| BDImageRequestIgnoreImage | 1 << 8 | 请求返回结果:不强制解码成 UIImage,返回 NSData。 |
| BDImageNotDecoderForDisplay | 1 << 14 | 请求返回结果:关闭预渲染。 |
| BDImageScaleDownLargeImages | 1 << 15 | 请求返回结果:针对大图会进行缩小优化 ( 渐进式加载、降采样开启会导致该选项失效 )。 |
| BDImageRequestCallbackNotInMainThread | 1 << 17 | 请求返回结果:设置下载完成回调时不从主线程回调(默认从主线程回调)。 |
| BDImageRequestNotVerifyData | 1 << 20 | 请求返回结果:下载后不校验下载数据的长度和格式(如果启用 decryptBlock 或 cryptoKey 会默认增加此选项)。 |
| BDImageRequestPreloadAllFrames | 1 << 23 | 请求返回结果:针对动图提前解码并缓存所有帧。 |
| BDImageNotDownsample | 1 << 19 | 请求返回结果:该次图片请求关闭降采样。 |
| BDImageRequestIgnoreQueue | 1 << 10 | 控制请求:图片下载忽略队列限制直接开始请求。 |
| BDImageNoRetry | 1 << 13 | 控制请求:图片下载失败后不进行重试。 |
| BDImageRequestSetDelaySetImage | 1 << 11 | 控件设置:UIImageView 等控件请求返回 UIImage 后不自动设置 image。 |
| BDImageRequestSetAnimationFade | 1 << 16 | 控件设置:UIImageView 等控件时添加默认淡入动画效果,可在 BDWebImageRequestConfig 中配置时长。 |
| BDImageKeepPreviousImage | 1 << 26 | 控件设置:UIImageView 等控件设置图片的时,在加载出图片前保持之前的图片不变。 |
| BDImageStaticImageProgressiveDownload | 1 << 27 | 渐进式加载:启用静图渐进式加载,支持 jpeg 和 png 格式。 |
| BDImageAnimatedImageProgressiveDownload | 1 << 18 | 渐进式加载:启用动图渐进式加载,支持 gif、awebp 和 heif 格式。 |
| BDImageHeicProgressDownloadForThumbnail | 1 << 24 | 渐进式加载:启用 heic 格式静图渐进式加载,优先加载缩略图。 |
| BDImageHeicThumbnailPassToBusinessLayer | 1 << 25 | 渐进式加载:heic 格式静图缩略图返回业务层(会有两次 completeBlock 回调,缩略图一次原图一次)。 |
| BDImageRequestSmartCorp | 1 << 21 | ImageX 服务端下发功能:智能裁剪。需要在图片访问 URL 中需要携带裁剪区域信息的模板配置信息,访问时,header 将返回智能裁剪的区域指定图片裁剪范围。如何在模板配置裁剪,详见图片处理配置。 |
| BDImageRequestDefaultOptions | BDImageRequestDefaultPriority | 默认请求选项。 |
@interface BDImageCacheConfig : NSObject <NSCopying>
缓存配置项,初始化方法会有默认值,注意修改完以后需要重新设置到缓存的 config 属性上方可生效。
| 类型 | 名称 |
|---|---|
| BOOL | enableLRU |
| BOOL | clearMemoryOnMemoryWarning |
| BOOL | clearMemoryWhenEnteringBackground |
| BOOL | shouldUseWeakMemoryCache |
| NSUInteger | memoryCountLimit |
| NSUInteger | memorySizeLimit |
| NSUInteger | singleImageMemorySizeLimit |
| double | lruNewSubListRate |
| BOOL | trimDiskWhenEnteringBackground |
| NSUInteger | diskCountLimit |
| NSUInteger | diskSizeLimit |
| NSUInteger | diskAgeLimit |
| BOOL | shouldDisableiCloud |
| BOOL | usingNewImageExtendCache |
| BDImageDiskDateType | diskDateType |
@property(nonatomic, assign) BOOL enableLRU;
是否开启 LRU ( Least Recently Used ) 缓存优先清理最不常使用的文件。
YES:是NO:否注意
该属性必须要在创建缓存对象的时刻在 init 方法里中传 Config 类才会生效(且优先级最高),对于主缓存 [BDImageCache sharedImageCache] 来说只能通过 BDImageCache 中的 enableMemoryLruOptimization 属性设置。
@property (nonatomic, assign) BOOL clearMemoryOnMemoryWarning;
在低内存时,是否清除所有内存缓存。
YES:(默认)是NO:否@property (nonatomic, assign) BOOL clearMemoryWhenEnteringBackground;
在进入后台时,是否清除所有内存缓存。
YES:(默认)是NO:否@property (assign, nonatomic) BOOL shouldUseWeakMemoryCache;
是否使用 weak cache 优化内存缓存。
YES:是NO:否@property (nonatomic, assign) NSUInteger memoryCountLimit;
设置最大内存缓存对象数量限制,默认无限制。
@property (nonatomic, assign) NSUInteger memorySizeLimit;
设置最大内存缓存大小,单位为 byte,默认 256 MB。
@property (nonatomic, assign) NSUInteger singleImageMemorySizeLimit;
设置单张图片允许存入的最大内存缓存大小限制,即超过该大小的图片不会储存到内存缓存。单位为 byte。
注意
@property (nonatomic, assign) double lruNewSubListRate;
设置 LRU 优化新、老缓存分区比例,该属性指定新分区的占比。
注意
默认新老比例为 5:3,即新分区占整体体积的 5/8。
@property (nonatomic, assign) BOOL trimDiskWhenEnteringBackground;
在进入后台时,是否清除超限或者过期的磁盘缓存。
YES:(默认)是NO:否@property (nonatomic, assign) NSUInteger diskCountLimit;
设置最大磁盘缓存对象数量限制,默认无限制。
@property (nonatomic, assign) NSUInteger diskSizeLimit;
设置最大磁盘缓存大小,单位为 byte,默认 256MB。
@property (nonatomic, assign) NSUInteger diskAgeLimit;
设置最大磁盘缓存过期时间,单位为秒,默认为 7 天。
@property (assign, nonatomic) BOOL shouldDisableiCloud;
设置磁盘缓存是否不支持从 iCloud 同步。
YES:(默认)是NO:否@property (assign, nonatomic) BOOL usingNewImageExtendCache;
是否使用新的数据库存储图片的相关附加信息。
YES:是NO:(默认)否@property (nonatomic, assign) BDImageDiskDateType diskDateType;
磁盘缓存使用的日期类型,详见 BDImageDiskDateType。
@interface BDBlurHashConfig : NSObject <NSCopying>
模糊图占位配置。
| 类型 | 名称 |
|---|---|
| <NSCopying>NSString* | blurHash |
| CGSize | targetSize |
| int | punch |
@property (nonatomic, copy, nullable) NSString *blurHash;
用于解码 BlurHash 的字符串。参考获取图片 BlurHash 码文档,了解如何获取指定图片的 BlurHash 码(模糊图)。
注意
为 nil 时则忽略解码本地 BlurHash,且优先级高于服务端下发的 BlurHash 字符串。
@property (nonatomic, assign) CGSize targetSize;
解码后图片的分辨率,单位为 px,取值越大,解码越慢。请根据业务需要,适当调整。
@property (nonatomic, assign) int punch;
对比度,取值范围大于 0,默认值为 1,传入小于等于 0 的值会兜底为 1。
typedef NS_ENUM( NSUInteger, BDImageDiskDateType )
磁盘缓存使用的日期类型。
| 类型 | 值 | 说明 |
|---|---|---|
| BDImageDiskDateTypeModification | 0 | 最后修改文件内容的时间。 |
| BDImageDiskDateTypeAccess | 1 | 最后访问文件的时间。 |
| BDImageDiskDateTypeCreation | 2 | 创建文件的时间。 |
| BDImageDiskDateTypeAttributeModification | 3 | 最后修改文件属性的时间。 |
typedef NS_ENUM( NSInteger, BDLivePhotoResultFrom )
标记 LivePhoto 的来源。
| 类型 | 值 | 说明 |
|---|---|---|
| BDLivePhotoResultFromNone | -1 | 不清楚来源。 |
| BDLivePhotoResultFromDownloading | 0 | 来自网络下载。 |
| BDLivePhotoResultFromMemoryCache | 1 | 来自内存缓存。 |
| BDLivePhotoResultFromDiskCache | 2 | 来自磁盘缓存。 |
typedef NS_ENUM( NSInteger, BDImageHeicThumbLocationType )
在当前 HEIC 图片查找缩略图的结果。
| 类型 | 值 | 说明 |
|---|---|---|
| BDImageHeicThumbLocationNotFound | -1 | 当前数据不包含缩略图数据。 |
| BDImageHeicThumbLocationFounded | 0 | 当前数据包含缩略图数据。 |
| BDImageHeicThumbLocationNotDetermined | 1 | 当前数据尚不确定是否包含缩略图数据。 |
typedef NS_ENUM( NSUInteger, BDImageDecoderSizeType )
图片尺寸操作类型。
| 类型 | 值 | 说明 |
|---|---|---|
| BDImageDecoderOriginSize | 0 | 原图尺寸。 |
| BDImageDecoderCroppedSize | 1 | 裁剪尺寸。 |
| BDImageDecoderSizeLimitDownsampledSize | 2 | 尺寸限制降采样尺寸。 |
| BDImageDecoderMemoryLimitedDownsampledSize | 3 | 内存限制降采样尺寸。 |
| BDImageDecoderScaleDownSize | 4 | 缩放尺寸。 |
| BDImageDecoderCroppedandScaleDownSize | 5 | 裁剪并缩放尺寸。 |
typedef NS_ENUM( NSInteger, BDWebImageResultFrom )
标记图片的来源。
| 类型 | 值 | 说明 |
|---|---|---|
| BDWebImageResultFromNone | -1 | 不清楚来源。 |
| BDWebImageResultFromDownloading | 0 | 图片来自网络下载。 |
| BDWebImageResultFromMemoryCache | 1 | 图片来自内存缓存。 |
| BDWebImageResultFromDiskCache | 2 | 图片来自磁盘缓存。 |
typedef NS_OPTIONS( NSUInteger, BDImageCacheType )
图片缓存类型。
| 类型 | 值 | 说明 |
|---|---|---|
| BDImageCacheTypeNone | 0 | 未找到图片的缓存类型,该参数只用于查询图片缓存后没找到缓存的返回结果。 |
| BDImageCacheTypeMemory | 1 << 0 | 内存缓存类型。 |
| BDImageCacheTypeDisk | 1 << 1 | 磁盘缓存类型。 |
| BDImageCacheTypeAll | BDImageCacheTypeMemory | BDImageCacheTypeDisk | 全部缓存类型(内存和磁盘)。 |
typedef NS_ENUM( NSUInteger, BDProgressiveAnimatedImageDelayType )
动图播放时的卡顿原因。
| 类型 | 值 | 说明 |
|---|---|---|
| BDAnimatedImageDelayTypeDownload | 0 | 网络下载过慢,后续帧未下载完成。 |
| BDAnimatedImageDelayTypeDecode | 1 | 解码速度太慢,后续帧未解码完成。 |
typedef NS_ENUM( NSInteger, BDLivePhotoRequestType )
LivePhoto 的请求类型。
| 类型 | 值 | 说明 |
|---|---|---|
| BDLivePhotoRequestTypeImage | 0 | LivePhoto 的图片请求。 |
| BDLivePhotoRequestTypeVideo | 1 | LivePhoto 的视频请求。 |
| 返回 | 名称 |
|---|---|
| void | BDImageCacheCallback |
void BDImageCacheCallback(UIImage * _Nullable image, NSString * _Nullable cachePath);
缓存回调的 block 定义。
传入参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| image | UIImage* | 缓存图片。 |
| cachePath | NSString* | 缓存路径。仅当为磁盘缓存时,有对应路径。 |
@interface UIImage (BDWebImage)
适配 UIImage 的 ImageX category,提供图片状态。
| 类型 | 名称 |
|---|---|
| NSURL* | bd_webURL |
| BDImageRequestKey* | bd_requestKey |
| BOOL | bd_loading |
| BOOL | bd_isDidScaleDown |
| BOOL | bd_isThumbnail |
| BOOL | bd_isFirstTimeImage |
@property (nonatomic, strong, nullable)NSURL *bd_webURL;
图片原始对应的下载地址。
@property (nonatomic, strong, nullable)BDImageRequestKey *bd_requestKey;
图片加载后其请求对应的键值。
@property (nonatomic, assign)BOOL bd_loading;
图片是否正在下载。
YES:是NO:否@property (nonatomic, assign)BOOL bd_isDidScaleDown;
图片是否被缩小。
YES:是NO:否@property (nonatomic, assign)BOOL bd_isThumbnail;
图片是否为缩略图。
YES:是NO:否@property (nonatomic, assign)BOOL bd_isFirstTimeImage;
当前图片是否是第一次回调得到的图片。
YES:是NO:否注意
在渐进式加载的时候,由于下载一部分就会解码并回调,因此除第一次回调图片为 YES,后续回调时该属性均为 NO。
typedef NS_ENUM( NSUInteger, BDProgressiveAnimatedImageDelayState )
数据延时的状态。
| 类型 | 值 | 说明 |
|---|---|---|
| BDAnimatedImageDelayStateGetDataDuringPlay | 0 | 下一张图片数据在上一帧播放结束前已下载完成。 |
| BDAnimatedImageDelayStateGetDataAfterPlay | 1 | 下一张图片数据在上一帧播放结束前未下载完成。 |
@interface BDAnimateImageFrame : NSObject
适用于动图,动图的某一帧图片。
| 类型 | 名称 |
|---|---|
| UIImage* | image |
| NSUInteger | index |
| CFTimeInterval | delay |
| CFTimeInterval | nextFrameTime |
@property (nonatomic, retain, nullable) UIImage *image;
动图的某一帧对应的图片。
@property (nonatomic, assign) NSUInteger index;
当前帧在动图中的索引。
@property (nonatomic, assign) CFTimeInterval delay;
帧与帧之间的间隔时间,单位为秒。
@property (nonatomic, assign) CFTimeInterval nextFrameTime;
预计播放下一帧的时间,单位为秒。
typedef NS_OPTIONS( NSUInteger, BDWebImageShouldDecodeImageFromType )
拦截解码的图片下载路径。
| 类型 | 值 | 说明 |
|---|---|---|
| BDWebImageShouldDecodeImageFromDownloading | 1 << 0 | 图片来自网络下载时拦截判断是否解码,此为默认值。 |
| BDWebImageShouldDecodeImageFromDisk | 1 << 1 | 图片来自磁盘缓存时拦截判断是否解码。 |
| BDWebImageShouldDecodeImageFromAll | BDWebImageShouldDecodeImageFromDownloading | BDWebImageShouldDecodeImageFromDisk | 所有需要解码的图片均拦截判断是否解码。 |