下载图像编辑图像然后缓存

时间:2015-07-19 11:59:57

标签: ios caching afnetworking sdwebimage

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]

还有其他替代做这样的事情吗?

1 个答案:

答案 0 :(得分: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 class:

的方法管理缓存
- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock;
- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion;

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