SDWebImageライブラリを使用してUICollectionViewにWeb画像をキャッシュしています。
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)
キャッシュされた画像のデータを取得する方法はありますか
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/Carthageを使用している場合は、import WebImage
SDWebimageは、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)
})
それでも、その画像を別の場所に保存したり、変更したりする場合は、上記の完了ブロックで行うことができます。
SDWebImage
はすでにこの種のキャッシュファイルをローカルに持っています
SDImageCache
を作成しますimageCache.queryDiskCache
_で画像を取得してみてください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)
})
}
})
_