Kingfisher图像处理库

1,152 阅读5分钟

Kingfisher 是一个功能强大的 Swift 图像处理库,专注于从网络加载、缓存和显示图像,广泛用于 iOS 开发。其 GitHub 仓库提供了丰富的文档和示例,方便开发者快速集成和使用。

方法和功能分类

Kingfisher 的方法主要通过扩展现有 UIKit 和 SwiftUI 组件实现,提供了便捷的链式调用和回调机制。以下按功能分类整理:

1. 基本图像加载
  • 方法: imageView.kf.setImage(with: url)
  • 描述: 将图像从 URL 异步下载并设置到 UIImageView,支持占位符、处理器、过渡动画和完成回调。
  • 代码示例:
    let url = URL(string: "https://example.com/image.png")
    imageView.kf.setImage(with: url, placeholder: UIImage(named: "placeholder"), options: [.transition(.fade(0.25))], completionHandler: { result in
        switch result {
        case .success(let value):
            print("Image loaded: \(value.image)")
        case .failure(let error):
            print("Error: \(error)")
        }
    })
    
  • 注解: 这是最常用的方法,支持多种选项配置,适合简单场景。
2. 方法链式调用(KF.url)
  • 方法: KF.url(url)
  • 描述: 通过方法链式调用配置图像加载选项,然后应用到目标视图(如 UIImageView),提供更灵活的控制。
  • 代码示例:
    KF.url(URL(string: "https://example.com/image.png"))
      .placeholder(UIImage(named: "placeholder"))
      .setProcessor(DownsamplingImageProcessor(size: imageView.bounds.size))
      .transition(.fade(1))
      .cacheOriginalImage()
      .onProgress { receivedSize, totalSize in
          print("\(receivedSize)/\(totalSize)")
      }
      .onSuccess { result in
          print("Success: \(result.image)")
      }
      .onFailure { error in
          print("Error: \(error)")
      }
      .set(to: imageView)
    
  • 注解: 支持占位符、图像处理器、过渡动画、缓存策略、进度和完成回调,适合复杂场景。
3. SwiftUI 支持(KFImage)
  • 方法: KFImage.url(url)
  • 描述: 在 SwiftUI 中加载和显示图像,支持链式调用配置,类似于 KF.url
  • 代码示例:
    KFImage(URL(string: "https://example.com/image.png"))
      .placeholder {
        Image("placeholder")
      }
      .resizable()
      .scaledToFit()
      .onProgress { receivedSize, totalSize in
          print("\(receivedSize)/\(totalSize)")
      }
      .onSuccess { result in
          print("Success: \(result.image)")
      }
      .onFailure { error in
          print("Error: \(error)")
      }
    
  • 注解: 适用于 SwiftUI 项目,提供类似的功能和配置选项。
4. 图像处理器
  • 方法: .setProcessor(processor)
  • 描述: 应用图像处理器,例如缩放、圆角等,内置多种处理器如 DownsamplingImageProcessorRoundCornerImageProcessor
  • 代码示例:
    let processor = RoundCornerImageProcessor(cornerRadius: 20)
    imageView.kf.setImage(with: URL(string: "https://example.com/image.png"), options: [.processor(processor)])
    
  • 注解: 适合对图像进行预处理,如调整大小或添加圆角。
5. 缓存管理
  • 方法: KingfisherManager.shared.cache
  • 描述: 访问和管理 Kingfisher 的缓存系统,包括内存缓存和磁盘缓存,支持清理、检查状态等。
  • 代码示例:
    let cache = KingfisherManager.shared.cache
    cache.clearDiskCache()
    cache.calculateDiskCacheSize { size in
        print("Disk cache size: \(size) bytes")
    }
    
  • 注解: 提供细粒度的缓存控制,适合优化性能。
6. 预加载图像
  • 方法: ImagePrefetcher(urls: [url])
  • 描述: 预加载一组图像以提升加载速度,适合在应用启动时或预期需要时使用。
  • 代码示例:
    let urls = [URL(string: "https://example.com/image1.png"), URL(string: "https://example.com/image2.png")]
    ImagePrefetcher(urls: urls).start()
    
  • 注解: 提高用户体验,减少首次加载延迟。
7. 其他 UI 组件扩展
  • 方法: button.kf.setImage(with: url, for: .normal)
  • 描述: 为其他 UI 组件(如 UIButtonNSButton)提供图像加载扩展。
  • 代码示例:
    button.kf.setImage(with: URL(string: "https://example.com/image.png"), for: .normal)
    
  • 注解: Kingfisher 支持多种 UI 组件的扩展,增强灵活性。
8. 过渡动画
  • 方法: .transition(.fade(duration))
  • 描述: 设置图像加载完成时的过渡动画,支持多种效果如淡入、缩放。
  • 代码示例:
    imageView.kf.setImage(with: URL(string: "https://example.com/image.png"), options: [.transition(.fade(1))])
    
  • 注解: 提升视觉效果,适合用户界面优化。
9. 占位符和指示器
  • 方法: .placeholder(image)
  • 描述: 在图像加载过程中显示占位符或指示器,支持自定义图像或系统指示器。
  • 代码示例:
    imageView.kf.setImage(with: URL(string: "https://example.com/image.png"), placeholder: UIImage(named: "placeholder"))
    
  • 注解: 提供加载过程中的用户反馈,增强体验。
10. 低数据模式支持
  • 方法: .lowDataModeSource(.network(lowResolutionURL))
  • 描述: 在低数据模式下,使用低分辨率图像,优化流量和性能。
  • 代码示例:
    KF.url(URL(string: "https://example.com/image.png"))
      .lowDataModeSource(.network(URL(string: "https://example.com/low-res.png")))
      .set(to: imageView)
    
  • 注解: 适合移动设备在低数据模式下的优化。
11. 进度和完成回调
  • 方法: .onProgress.onSuccess.onFailure
  • 描述: 分别用于监控下载进度、处理成功和失败情况,提供对下载过程的全面控制。
  • 代码示例:
    KF.url(URL(string: "https://example.com/image.png"))
      .onProgress { receivedSize, totalSize in
          print("\(receivedSize)/\(totalSize)")
      }
      .onSuccess { result in
          print("Success: \(result.image)")
      }
      .onFailure { error in
          print("Error: \(error)")
      }
      .set(to: imageView)
    
  • 注解: 适合需要实时反馈的场景,如进度条显示。
12. Live Photo 支持
  • 方法: .loadLivePhoto
  • 描述: 加载和缓存 Live Photo,适用于支持 Live Photo 的场景。
  • 代码示例:
    imageView.kf.setImage(with: URL(string: "https://example.com/livephoto"), options: [.loadLivePhoto], completionHandler: nil)
    
  • 注解: 扩展了 Kingfisher 的功能,适合动态图像场景。

方法总结表

以下表格汇总了所有方法及其主要功能,便于快速查阅:

方法主要功能
imageView.kf.setImage基本图像加载,支持占位符和动画
KF.url方法链式调用,灵活配置加载选项
KFImage.urlSwiftUI 支持,加载和显示图像
.setProcessor应用图像处理器,如缩放、圆角
KingfisherManager.shared.cache管理缓存,清理和检查状态
ImagePrefetcher预加载图像,提升加载速度
button.kf.setImage扩展支持其他 UI 组件
.transition设置加载完成时的过渡动画
.placeholder设置加载过程中的占位符
.lowDataModeSource低数据模式下使用低分辨率图像
.onProgress监控下载进度
.onSuccess处理加载成功
.onFailure处理加载失败
.loadLivePhoto加载和缓存 Live Photo

其他重要功能

  • 异步下载和缓存: Kingfisher 支持高效的异步下载和多级缓存(内存和磁盘),提升性能。
  • 自定义处理器: 用户可以扩展 Kingfisher 添加自定义图像处理器,满足特定需求。
  • 独立组件: 下载器、缓存系统和处理器可以独立使用,灵活性高。
  • SwiftUI 兼容性: 通过 KFImage 支持 SwiftUI,确保现代化开发支持。
  • Swift 6 和 Swift Concurrency 支持: 确保未来兼容性,适合长期项目。