SDWebImage在caching之前处理图像

我从网上获取大量图片,并且它们都是大小不一的 – 它们可以是大的,小的等等。

所以我可以调整它们的大小,当我在单元格中显示他们,但这是低效的。 在SDWebImage下载并caching大小后重新调整它们的方式会更好,而不是在磁盘上存储大图像并为每个单元resize。

那么我怎样才能用SDWebImage来做到这一点,或者我不得不在课堂上进行一些攻破?

我和你有同样的问题,并尝试先调整SDWebImage,但最终build立了我自己的组件来解决问题。 你可以看看这里: https : //github.com/adig/RemoteImageView

SDWebImage开发人员Olivier Poitrey 在这里为我解答了这个问题。

您必须实现SDWebImageManagerDelegate协议,然后将其设置为共享pipe理器的委托,如下所示:

SDWebImageManager.sharedManager.delegate = self; using the imageManager:transformDownloadedImage:withURL: instance method. 

更多信息。

为我完美工作。

SDWebImage 3.8.2

如果使用UIImageView类别sd_setImageWithURL 。 我创build了另一个UIImageView类(扩展名)

 func modifiedImageFromUrl(url: NSURL?) { self.sd_setImageWithURL(url) { (image, error, cacheType, url) in if cacheType == SDImageCacheType.None && image != nil { dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) { let modifiedImage = // modify image as you want dispatch_async(dispatch_get_main_queue()) { SDWebImageManager.sharedManager().saveImageToCache(modifiedImage, forURL: url) self.image = modifiedImage } } } } } 

MaeSTRo在Swift 3中的回答扩展:

 myImageView.sd_setImage(with: imageUrl){ (image, error, cacheType, url) in guard let image = image, cacheType == .none else { return } DispatchQueue.global(qos: .userInitiated).async { let modifiedImage = myImageProcessor(image) SDWebImageManager.shared().saveImage(toCache: modifiedImage, for: imageUrl) DispatchQueue.main.async { myImageView.image = modifiedImage myImageView.setNeedsDisplay() } } }