SDWebImage 该库提供了一个支持缓存的异步图像下载器。为方便起见,我们为 UI 元素添加了类别,例如UIImageView、UIButton、MKAnnotationView。
注:SD是Simple Design的前缀(这是作者Olivier Poitrey在Daily Motion公司的团队名称)
特征
- UIImageView, UIButton,MKAnnotationView添加 web 图像和缓存管理的类别
- 异步图片下载器
- 具有自动缓存过期处理的异步内存 + 磁盘映像缓存
- 背景图像解压缩以避免帧率下降
- 渐进式图像加载(包括动画图像,如 Web 浏览器中显示的 GIF)
- 缩略图图像解码以节省大图像的 CPU && 内存
- 可扩展的图像编码器,支持海量图像格式,如 WebP
- 动态图像的全栈解决方案,在 CPU && 内存之间保持平衡
- 下载后可立即对图像应用可定制和可组合的转换
- 可定制的多缓存系统
- 可定制的多个加载器系统以扩展功能,例如照片库
- 图像加载指示器
- 图片加载过渡动画
- 保证不会多次下载相同的 URL
- 保证不会一次又一次地重试虚假 URL
- 保证主线程永远不会被阻塞
- 现代 Objective-C 和更好的 Swift 支持
对于Apple visionOS
从5.18.0开始,SDWebImage可以为visionOS平台编译。
然而,它仍然处于测试阶段,可能包含与稳定的iOS UIKit支持不同的问题。
为了构建VisionOS,目前我们只支持标准的Xcode集成。
支持的图像格式
- 苹果系统支持的图像格式(JPEG、PNG、TIFF、BMP…),包括GIF / APNG动画图像
- 来自 iOS 11/macOS 10.13 的 HEIC 格式,包括来自 iOS 13/macOS 10.15 通过
SDWebImageHEICCoder 的动画HEIC。对于较低的固件,使用编码器插件SDWebImageHEIFCoder - 来自iOS 14/macOS 11.0的 WebP
格式,通过SDWebImageAWebPCoder。对于较低的固件,请使用编码器插件SDWebImageWebPCoder - 支持 BPG、AVIF 等新图像格式的可扩展编码器插件。以及PDF、SVG等矢量格式。查看图像编码器插件列表中的所有列表
附加模块和生态系统
为了保持SDWebImage的重点和仅限于核心功能,同时也允许可扩展性和自定义行为,在5.0重构期间,我们专注于将库模块化。因此,我们已经将/构建新模块转移到SDWebImage org。
SwiftUI
SwiftUI是一个用Swift编写的创新UI框架,用于在所有苹果平台上构建用户界面。
我们通过构建一个名为SDWebImageSwiftUI的全新框架来支持SwiftUI,该框架建立在SDWebImage核心功能(缓存、加载和动画)之上。
新框架为SwiftUI世界引入了两个视图结构WebImage和AnimatedImage,任何视图的ImageIndicator修饰符,数据源的ImageManager可观察对象。
支持iOS 13+ / macOS 10.15+ / tvOS 13+ / watchOS 6+和Swift 5.1。
其他图像格式的编码器
- SDWebImageWebPCoder - WebP格式编码器。iOS 8+/macOS 10.10+。基于libwebp
- SDWebImageHEIFCoder - HEIF格式编码器,支持iOS 8+/macOS 10.10+。基于libheif
- SDWebImageBPGCoder - BPG格式的编码器。基于libbpg
- SDWebImageFLIFCoder - FLIF格式的编码器。基于libflif
- SDWebImageAVIFCoder - AVIF(基于AV1)格式的编码器。基于libavif
- SDWebImagePDFCoder - PDF矢量格式编码器。使用内置框架
- SDWebImageSVGCoder - SVG矢量格式编码器。使用内置框架
- SDWebImageSVGNativeCoder - SVG原生矢量格式编码器。基于svg-native
- SDWebImageLottieCoder - Lottie动画格式的编码器。基于rlottie
自定义缓存
- SDWebImageYYPlugin - 支持使用YYCache缓存图像的插件
- SDWebImagePINPlugin - 支持使用PINCache缓存图像的插件
定制装载机
- SDWebImagePhotosPlugin - 支持从照片加载图像的插件(使用Photos.framework)
- SDWebImageLinkPlugin -
支持从富链接网址以及LPLinkView加载图像的插件(使用LinkPresentation.framework)
与第三方库集成
- SDWebImageLottiePlugin - 支持 Lottie-iOS的插件,用远程JSON文件撕裂矢量动画
- SDWebImageSVGKitPlugin - 支持SVGKit、使用Core Animation、iOS 8+/macOS
10.10+支持SVG渲染的插件 - SDWebImageFLPlugin - 支持FLAnimatedImage作为动画GIF引擎的插件
- SDWebImageYYPlugin - 用于集成YYImage和YYCache进行图像渲染和缓存的插件
兼容性
iOS 9.0或更高版本
tvOS 9.0或更高版本
watchOS 2.0或更高版本
macOS 10.11或更高版本(Catalyst为10.15)
Xcode 11.0或更高版本
向后兼容性
对于iOS 8、macOS 10.10或Xcode < 11,请使用高达5.9.5的任何5.x版本
对于iOS 7、macOS 10.9或Xcode < 8,请使用高达44.6的任何4.x版本
对于macOS 10.8,使用高达4.3.0的任何4.x版本
对于iOS 5和6,使用高达3.7.6的任何3.x版本
对于iOS < 5.0,请使用最新版本2.0。
如何使用
OC
#import <SDWebImage/SDWebImage.h>
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
Swift
import SDWebImage
imageView.sd_setImage(with: URL(string: "http://www.domain.com/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))
动画图像(GIF)支持
在5.0中,我们引入了一种支持动画图像的全新机制。这包括动画图像加载、渲染、解码,还支持自定义(适用于高级用户)。
此动画图像解决方案适用于iOS/tvOS/macOS。SDAnimatedImage是UIImage/NSImage的子类,SDAnimatedImageView是UIImageView/NSImageView的子类,以使它们与通用框架API兼容。
SDAnimatedImageView支持熟悉的图像加载类别方法,类似于UIImageView/NSImageView的下拉式替换。
没有UIView(如WatchKit或CALayer)?您仍然可以使用播放器引擎SDAnimatedPlayer进行高级播放和渲染。
OC
SDAnimatedImageView *imageView = [SDAnimatedImageView new];
SDAnimatedImage *animatedImage = [SDAnimatedImage imageNamed:@"image.gif"];
imageView.image = animatedImage;
Swift
let imageView = SDAnimatedImageView()
let animatedImage = SDAnimatedImage(named: "image.gif")
imageView.image = animatedImage
安装
在项目中使用 SDWebImage 有四种方法:
- CocoaPods
CocoaPods是Objective-C的依赖管理器,它自动化并简化了在项目中使用第三方库的过程。有关更多详细信息,请参阅入门部分。
Podfile
platform :ios, ‘8.0’
pod ‘SDWebImage’, ‘~> 5.0’
快速和静态框架
Swift项目之前必须使用use_frameworks!让所有Pod成为动态框架,让CocoaPods工作。
platform :ios, ‘8.0’
use_frameworks!
pod ‘SDWebImage’
子规格
现在有2个子规格可供选择:Core和MapKit(这意味着您只能安装部分SDWebImage模块。默认情况下,您只能获得Core,因此如果您需要MapKit,则需要指定它)。
Podfile示例:
pod ‘SDWebImage/MapKit’
- Carthage
Carthage是Swift和Objective-C的轻量级依赖管理器。它利用CocoaTouch模块,比CocoaPods侵入性更小。
安装详情参考原文
- Swift Package Manager
Swift软件包管理器(SwiftPM)是一个用于管理Swift代码分发以及C家族依赖的工具。从Xcode 11开始,SwiftPM与Xcode原生集成。
SDWebImage支持5.1.0版本的SwiftPM。要使用SwiftPM,您应该使用Xcode 11打开您的项目。单击File-> Swift Packages->Add Package Dependency,输入SDWebImage repo的URL。或者,您可以使用GitHub帐户登录Xcode,只需键入SDWebImage即可搜索。
选择软件包后,您可以选择依赖类型(标记的版本、分支或提交)。然后Xcode将为您设置所有内容。
如果您是框架作者并使用SDWebImage作为依赖项,请更新您的Package.swift文件:
let package = Package(
// 5.1.0 ..< 6.0.0
dependencies: [
.package(url: "https://github.com/SDWebImage/SDWebImage.git", from: "5.1.0")
],
// ...
)
- 手动安装
安装详情参考原文
文章内容来自Github上的SDWebImage,若有版权问题请与博主联系。
GitHub:https://github.com/SDWebImage/SDWebImage