源码阅读:SDWebImage(四)——SDWebImageCoder

该文章阅读的SDWebImage的版本为4.3.3。

这个类定义了两个协议,目的是定义图片编解码类所要实现的接口。

1.公共变量与函数

/**
 定义了一个BOOL类型的key,用于定义是否在解压缩期间缩放图片
 */
FOUNDATION_EXPORT NSString * _Nonnull const SDWebImageCoderScaleDownLargeImagesKey;
复制代码
NSString * const SDWebImageCoderScaleDownLargeImagesKey = @"scaleDownLargeImages";
复制代码

/**
 定义了一个单利方法,获取设备的RGB色彩空间
 */
CG_EXTERN CGColorSpaceRef _Nonnull SDCGColorSpaceGetDeviceRGB(void);
复制代码
CGColorSpaceRef SDCGColorSpaceGetDeviceRGB(void) {
    // 通过单例模式获取设备的RGB色彩空间并返回
    static CGColorSpaceRef colorSpace;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        colorSpace = CGColorSpaceCreateDeviceRGB();
    });
    return colorSpace;
}
复制代码

/**
 检查图片是否有透明度
 */
CG_EXTERN BOOL SDCGImageRefContainsAlpha(_Nullable CGImageRef imageRef);
复制代码
BOOL SDCGImageRefContainsAlpha(CGImageRef imageRef) {
    // 如果没传图片就返回没有透明度
    if (!imageRef) {
        return NO;
    }
    // 获取图片的透明度信息
    CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);
    // 如果满足下面的任何一个选项,就代表没有透明度;否则就有透明度
    BOOL hasAlpha = !(alphaInfo == kCGImageAlphaNone ||
                      alphaInfo == kCGImageAlphaNoneSkipFirst ||
                      alphaInfo == kCGImageAlphaNoneSkipLast);
    return hasAlpha;
}
复制代码

2.SDWebImageCoder协议

  • 解码
/**
 如果实现了该方法的类能解码图片数据就返回YES;否则,就返回NO
 */
- (BOOL)canDecodeFromData:(nullable NSData *)data;
复制代码
/**
 将图片数据解码为图片对象
 */
- (nullable UIImage *)decodedImageWithData:(nullable NSData *)data;
复制代码
/**
 用原始图像和图像数据解压缩图像
 其中参数optionsDict就是利用第一节定义的变量SDWebImageCoderScaleDownLargeImagesKey,如果value传YES就缩放图像
 */
- (nullable UIImage *)decompressedImageWithImage:(nullable UIImage *)image
                                            data:(NSData * _Nullable * _Nonnull)data
                                         options:(nullable NSDictionary<NSString*, NSObject*>*)optionsDict;
复制代码
  • 编码
/**
 如果实现了该方法的类能编码图片数据就返回YES;否则,就返回NO
 */
- (BOOL)canEncodeToFormat:(SDImageFormat)format;
复制代码
/**
 将图片图片对象编码为图像数据
 */
- (nullable NSData *)encodedDataWithImage:(nullable UIImage *)image format:(SDImageFormat)format;
复制代码

3.SDWebImageProgressiveCoder

/**
 如果实现了该方法的类能逐行解码图片数据就返回YES;否则,就返回NO
 */
- (BOOL)canIncrementallyDecodeFromData:(nullable NSData *)data;
复制代码
/**
 逐行解码图片数据为图像对象
 */
- (nullable UIImage *)incrementallyDecodedImageWithData:(nullable NSData *)data finished:(BOOL)finished;
复制代码

可以看到这个类中的两个协议定义了图片编解码类的接口。看完这个类,我们就可以看那些用来编解码各种格式图片的类了。

源码阅读系列:SDWebImage

源码阅读:SDWebImage(一)——从使用入手

源码阅读:SDWebImage(二)——SDWebImageCompat

源码阅读:SDWebImage(三)——NSData+ImageContentType

源码阅读:SDWebImage(四)——SDWebImageCoder

源码阅读:SDWebImage(五)——SDWebImageFrame

源码阅读:SDWebImage(六)——SDWebImageCoderHelper

源码阅读:SDWebImage(七)——SDWebImageImageIOCoder

源码阅读:SDWebImage(八)——SDWebImageGIFCoder

源码阅读:SDWebImage(九)——SDWebImageCodersManager

源码阅读:SDWebImage(十)——SDImageCacheConfig

源码阅读:SDWebImage(十一)——SDImageCache

源码阅读:SDWebImage(十二)——SDWebImageDownloaderOperation

源码阅读:SDWebImage(十三)——SDWebImageDownloader

源码阅读:SDWebImage(十四)——SDWebImageManager

源码阅读:SDWebImage(十五)——SDWebImagePrefetcher

源码阅读:SDWebImage(十六)——SDWebImageTransition

源码阅读:SDWebImage(十七)——UIView+WebCacheOperation

源码阅读:SDWebImage(十八)——UIView+WebCache

源码阅读:SDWebImage(十九)——UIImage+ForceDecode/UIImage+GIF/UIImage+MultiFormat

源码阅读:SDWebImage(二十)——UIButton+WebCache

源码阅读:SDWebImage(二十一)——UIImageView+WebCache/UIImageView+HighlightedWebCache

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值