翠鸟LocalFileImageDataProvider DownsamplingImageProcessor调整内存中数据的大小

时间:2019-01-29 21:29:59

标签: swift kingfisher

由于KingfisherLocalFileImageDataProvider引入了5.0。我决定切换到Kingfisher来从磁盘加载图像,而不是直接加载图像。正如他们所说的

// Compared to loading it directly, 
// you can get benefit of using Kingfisher's extension methods, 
// as well as applying `ImageProcessor`s and storing the image to `ImageCache` of Kingfisher.

效果很好。因为我的磁盘映像非常大(每个映像超过1MB)。


所以问题是,如果我通过使用DownsamplingImageProcessor中的UICollectionView's Cell来调整图像尺寸,是否仍可以访问“图像的详细信息”页面中的原始尺寸图像以显示完整的图像仍然使用这样的分辨率图像

//The way loading image from "Image detail page"
let url = URL(fileURLWithPath: path)
let provider = LocalFileImageDataProvider(fileURL: url)
imageView.kf.setImage(with: provider)

因此,在“ UICollectionView页面”中,我可以像这样使用它,

let url = URL(fileURLWithPath: path)
let provider = LocalFileImageDataProvider(fileURL: url)
let processor = DownsamplingImageProcessor(size: size)
imageView.kf.setImage(with: provider, options: [.processor(processor)])

那么它们是否在Kingfisher缓存机制中缓存了不同的图像缓存?因为他们似乎在cacheKey中使用了相同的LocalFileImageDataProvider

public init(fileURL: URL, cacheKey: String? = nil) {
  self.fileURL = fileURL
  self.cacheKey = cacheKey ?? fileURL.absoluteString
}

我需要为这两个不同的页面自定义cacheKey吗?

1 个答案:

答案 0 :(得分:1)

您不需要使用其他缓存键。 processor有一个标识符,当存储在缓存中时,它将用于计算最终的缓存密钥。因此,一切对您都应该很好(作为您的代码段)。

您只需在图像设置方法完成处理程序中打印出图像尺寸,以确认您要加载的图像。

imageView.kf.setImage(with: url) { result in
    switch result {
    case .success(let value):
        // The image was set to image view:
        print(value.image.size)
    //...