SDWebImage process images before caching

偶尔善良 提交于 2019-11-28 18:28:29

I had the same problem as you, and tried tweaking SDWebImage first, but ended up building my own component that solved the problem. You can take take a look at it here : https://github.com/adig/RemoteImageView

Jayson Ng

SDWebImage developer Olivier Poitrey answered this question for me here.

You have to implement the SDWebImageManagerDelegate protocol and then set it as the shared manager's delegate like this:

SDWebImageManager.sharedManager.delegate = self;

using the imageManager:transformDownloadedImage:withURL: instance method.

More information.

Worked perfectly for me.

SDWebImage 3.8.2

If using UIImageView category sd_setImageWithURL. I have created another UIImageView category (extension)

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
                }
            }
        }
    }
}

Expansion on MaeSTRo's answer in 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()
        }
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!