博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
源码阅读:SDWebImage(十九)——UIImage+ForceDecode/UIImage+GIF/UIImage+MultiFormat
阅读量:6938 次
发布时间:2019-06-27

本文共 2916 字,大约阅读时间需要 9 分钟。

该文章阅读的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

转载地址:http://efbnl.baihongyu.com/

你可能感兴趣的文章
支持伍洲彤鄙视蔡国庆
查看>>
我的友情链接
查看>>
Apache Shiro学习笔记(七)Servlet3.0 Listener介绍
查看>>
zabbix2
查看>>
我的友情链接
查看>>
char、varchar的区别
查看>>
[操作系统作业]os实验三:进程的管道通信
查看>>
numpy 读取txt为array 一行搞定
查看>>
linux上监控磁盘使用情况并发送邮件
查看>>
EF6 秘籍 2th:实体数据建模基础 (四)生成一个简单模型
查看>>
我的友情链接
查看>>
计算机与操作系统(一)
查看>>
Spring事务处理
查看>>
oracle 查询结果对空值的排序
查看>>
常见HTTP错误代码解析
查看>>
网上的东西,不能什么都学
查看>>
我的友情链接
查看>>
Context域从web.xml获取数据学习笔记
查看>>
Docker Registry v2 + Token Auth Server (Registry v2 认证)实例。
查看>>
参考---------正确安装MySQL5.6的配置文件
查看>>