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

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

由于这几个分类都是UIImage的分类,并且内容相对较少,就写在一篇文章中。

1.UIImage+ForceDecode

这个分类为UIImage提供了解码的快捷方法。

1.1.公共方法

/**
 解码指定的图像对象
 */
+ (nullable UIImage *)decodedImageWithImage:(nullable UIImage *)image;
复制代码
/**
 解码并缩小指定的图像对象
 */
+ (nullable UIImage *)decodedAndScaledDownImageWithImage:(nullable UIImage *)image;
复制代码

1.2.实现

+ (UIImage *)decodedImageWithImage:(UIImage *)image {
    // 如果没传图像对象就返回空
    if (!image) {
        return nil;
    }
    // 创建变量保存图像数据
    NSData *tempData;
    // 解压图像
    return [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&tempData options:@{SDWebImageCoderScaleDownLargeImagesKey: @(NO)}];
}
复制代码
+ (UIImage *)decodedAndScaledDownImageWithImage:(UIImage *)image {
    // 如果没传图像对象就返回空
    if (!image) {
        return nil;
    }
    // 创建变量保存图像数据
    NSData *tempData;
    // 解压并缩小图像
    return [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&tempData options:@{SDWebImageCoderScaleDownLargeImagesKey: @(YES)}];
}
复制代码

2.UIImage+GIF

这个分类用于创建动图

2.1.公共方法

/**
 根据图像数据创建图像对象
 */
+ (UIImage *)sd_animatedGIFWithData:(NSData *)data;
复制代码
/**
 判断图像对象是否是动图
 */
- (BOOL)isGIF;
复制代码

2.2.实现

+ (UIImage *)sd_animatedGIFWithData:(NSData *)data {
    // 如果没传图像数据就返回空
    if (!data) {
        return nil;
    }
    // 解码数据生成动图对象
    return [[SDWebImageGIFCoder sharedCoder] decodedImageWithData:data];
}
复制代码
- (BOOL)isGIF {
    // 根据images属性判断是否是动图
    return (self.images != nil);
}
复制代码

3.UIImage+MultiFormat

这个分类提供了数据和图像互相转换的方法

3.1.公共属性

/**
 动图循环次数
 */
@property (nonatomic, assign) NSUInteger sd_imageLoopCount;
复制代码

3.2.公共方法

/**
 根据指定数据创建图像对象
 */
+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data;
复制代码
/**
 获取图像对象的数据
 */
- (nullable NSData *)sd_imageData;
复制代码
/**
 根据图像格式获取图像对象的数据
 */
- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat;
复制代码

3.3.实现

- (NSUInteger)sd_imageLoopCount {
    NSUInteger imageLoopCount = 0;
    NSNumber *value = objc_getAssociatedObject(self, @selector(sd_imageLoopCount));
    if ([value isKindOfClass:[NSNumber class]]) {
        imageLoopCount = value.unsignedIntegerValue;
    }
    return imageLoopCount;
}

- (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount {
    NSNumber *value = @(sd_imageLoopCount);
    objc_setAssociatedObject(self, @selector(sd_imageLoopCount), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
复制代码
+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data {
    // 解码图像数据获取图像对象
    return [[SDWebImageCodersManager sharedInstance] decodedImageWithData:data];
}
复制代码
- (nullable NSData *)sd_imageData {
    // 以未知图像格式调用下面方法获取图像数据
    return [self sd_imageDataAsFormat:SDImageFormatUndefined];
}
复制代码
- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat {
    // 创建变量保存图像数据
    NSData *imageData = nil;
    // 通过编码获取图像数据
    if (self) {
        imageData = [[SDWebImageCodersManager sharedInstance] encodedDataWithImage:self format:imageFormat];
    }
    return imageData;
}
复制代码

源码阅读系列: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值