2016-12-28 2 views
3

Я использую SDWebImage библиотеку для кэширования веб-изображений в моем UICollectionView:как я могу получить данные кэшируются изображений SDWebImage

cell.packItemImage.sd_setImage(with: URL(string: smileImageUrl[indexPath.row])) 

, но я хочу, чтобы сохранить кэшированные изображения локально в файле, а не загружая их снова

FileManager.default.createFile(atPath: newPath, contents: Data(contentsOf: URL(string: snapchildvalue[Constants.smiles.smileImageUrl] as! String)!), attributes: nil) 

есть способ, чтобы получить данные из кэшированных изображений

ответ

0

SDWebimage chaches изображение, если оно загружено из URL. В основном это сохраняет изображение против URL-адреса и в следующий раз, если изображение доступно для URL-адреса. Он просто получит это изображение из кеша. Таким образом, метод ниже будет вызываться мгновенно, если изображение уже загружено на устройство.

imgView.sd_setImage(with: URL(string:url), completed: { (image, error, type, url) in 
     imgView.image = image 
     //Do any thing with image here. This will be called instantly after image is downloaded to cache. E.g. if you want to save image (Which is not required for a simple image fetch, 
     //you can use FileManager.default.createFile(atPath: newPath, contents: UIImagePNGRepresentation(image), attributes: nil) 
    }) 

Тем не менее, если вы хотите сохранить этот образ где-то еще, или изменить его или что-то, вы можете это сделать в блоке завершения выше.

7

SDWebImage загрузок автоматически загруженных изображений. Вы можете использовать SDImageCache для извлечения изображений из кеша. Для текущего сеанса приложения есть кэш памяти, который будет быстрее, и есть кеш диска. Пример использования:

if let image = SDImageCache.shared().imageFromDiskCache(forKey: imageURL.absoluteString) { 
//use image 
} 

if let image = SDImageCache.shared().imageFromMemoryCache(forKey: imageURL.absoluteString) { 
//use image 
} 

Кроме того, убедитесь вы import SDWebImage в файле. (Если вы используете Swift/Карфаген, он будет import WebImage

0

SDWebImage уже есть такой файл кэширования локально

  1. Создать SDImageCache с пространством имен по вашему выбору
  2. Попробуйте получить изображение с imageCache.queryDiskCache
  3. Если изображение существует, установите его в ImageView, если нет, то используйте sd_setImage, чтобы получить изображение, а затем сохранить его в локальный кэш с SDImageCache.shared().store

Ключ обычно, чтобы быть строке URL изображений

Что-то вроде этого, не может быть правильный синтаксис:

imageCache.queryDiskCache(forKey: urlForImageString().absoluteString, done: {(_ image: UIImage, _ cacheType: SDImageCacheType) -> Void in 
    if image { 
     self.imageView.image = image 
    } 
    else { 
     self.imageView.sd_setImage(withURL: urlForImageString(), placeholderImage: UIImage(named: "placeholder")!, completed: {(_ image: UIImage, _ error: Error, _ cacheType: SDImageCacheType, _ imageURL: URL) -> Void in 
      SDImageCache.shared().store(image, forKey: urlForImageString().absoluteString) 
     }) 
    } 
}) 
Смежные вопросы