Kingfisher LocalFileImageDataProvider DownsamplingImageProcessor изменяет размер данных в памяти

Так как Kingfisher представил LocalFileImageDataProvider из 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.

Это прекрасно работает. так как мои изображения с диска довольно большие (более 1 МБ каждое).


Итак, вопрос в следующем: если я изменю размер изображения, используя 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 для этих двух разных страниц?


person Yuan Fu    schedule 29.01.2019    source источник


Ответы (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)
    //...

person onevcat    schedule 14.02.2019