【问题标题】:Download Image Edit image then Cache下载图像编辑图像然后缓存
【发布时间】:2015-10-08 15:48:24
【问题描述】:

UIImageview + afnetworking 下载图片并缓存图片。

但在某些情况下,服务器图像 = 15mb。所以我需要根据一些因素对它们进行压缩并使其达到 1mb,然后需要缓存它们。

另一方面,SDWebImageCache 让您定义自己的缓存并存储它们

是否有任何内置机制用于下载、编辑然后保存到缓存中?

[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL
                                                options:0
                                               progress:^(NSInteger receivedSize, NSInteger expectedSize)
                                               {
                                                   // progression tracking code
                                               }
                                               completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished)
                                               {
                                                   if (image && finished)
                                                   {
                                                       // do something with image
                                                   }
                                               }];

然后使用 [[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey]

除了做这样的事情还有其他选择吗?

【问题讨论】:

    标签: ios caching afnetworking sdwebimage


    【解决方案1】:

    您使用SDWebImage 的情况是正确的。
    出于编辑目的,您需要将委托设置为 SDWebImageManager 对象并实现必要的方法:

    // Set delegate
    [SDWebImageManager sharedManager].delegate = self;
    
    // Implement delegate method
    - (UIImage *)imageManager:(SDWebImageManager *)imageManager 
     transformDownloadedImage:(UIImage *)image 
                     withURL:(NSURL *)imageURL {
    
        UIImage scaledImage = ... // Make scale based on 'image' object
        return scaledImage;
    }
    

    请注意,此方法在图像下载后立即调用,但在将其存储到内存缓存之前以及调用完成块之前。
    此方法的文档:

    允许在图像下载后立即对其进行转换 就在将其缓存在磁盘和内存上之前。注意:此方法是 从全局队列中调用,以免阻塞主线程。

    之后,您将能够在您的问题中使用SDWebImageDownloaderSDImageCache

    [SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL
                                                    options:0
                                                   progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                                                       // progression tracking code
                                                   }
                                                   completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
                                                       if (image && finished) {
                                                            [[SDImageCache sharedImageCache] storeImage:image forKey:myCacheKey];
                                                       }
                                                   }];
    

    然后就可以使用SDImageCache类的方法来管理缓存了:

    - (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock;
    - (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion;
    

    如果您需要根据最大数据大小进行图像缩放的算法,请查看this 答案。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 2021-10-20
      • 2011-06-29
      • 1970-01-01
      相关资源
      最近更新 更多