2015-07-19 88 views
2

UIImageview +網絡下載圖像並緩存圖像。下載圖像編輯圖像然後緩存

但是在某些情況下,服務器映像是= 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

您的場景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在你的問題:

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

如果您:

[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類的使用方法管理緩存需要最大數據大小的圖像縮放算法看看this答案。