SDWebImage process images before caching

后端 未结 4 631
一生所求
一生所求 2020-12-13 11:18

I fetch a lot of images from the web, and they are all kind of sizes - they can be big, small etc..

So I can resize them when I display them in the cell but this is

相关标签:
4条回答
  • 2020-12-13 11:59

    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

    0 讨论(0)
  • 2020-12-13 12:00

    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
                    }
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-13 12:01

    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()
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-13 12:07

    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.

    0 讨论(0)
提交回复
热议问题