繁体   English   中英

SDWebImage在缓存之前处理图像

[英]SDWebImage process images before caching

我从网上获取了很多图像,它们都是各种尺寸 - 它们可以是大的,小的等等。

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

那么我怎么能用SDWebImage做到这一点,或者我必须在课堂上进行一些修改?

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

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

SDWebImageManager.sharedManager.delegate = self;

using the imageManager:transformDownloadedImage:withURL: instance method.

更多信息。

为我工作完美。

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

SDWebImage 3.8.2

如果使用UIImageView类别sd_setImageWithURL 我创建了另一个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()
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM