2014-06-12 56 views
4

我使用SDWebImage異步下載圖像到我的UIImageView s。大部分收到​​的圖片尺寸均可接受,並且可以輕鬆下載,並設置爲UIImageView s。使用SDWebImage處理超大圖像的下載

但有時候,當URL上的源圖像的分辨率非常高時(相對於我的imageView - 60x60的大小)。在這種情況下,圖像從未設置。有時我的應用程序崩潰,有時沒有任何反應(圖像保留爲nil),並且在極少數情況下,我收到了一個類似如下的錯誤:Unable to allocate 400000 bytes of memory(我不完全確定確切的錯誤日誌,我道歉)。

例如,this來自Pinterest網站本身pinterest圖標的圖像是巨大的(10000 x 10000)。我的imageView永遠不能繪製這張圖片。目前,我已經硬編碼以用this替換圖像,但我知道這是不好的做法。此外,這只是一種情況,可能會有更多的圖像,例如這可能會影響用戶體驗。

我該如何處理這種情況?

+0

圖像是否正確下載?我的意思是不管圖像有多大,你是否可以下載它? – channi

+1

我已經創建了一個拉請求來解決這個問題https://github.com/rs/SDWebImage/pull/769 – gsempe

回答

1

只需檢查您收到的圖像大小,當尺寸比您的imageview可接受的尺寸大得多時,您可以調整圖像大小,並在此處鏈接調整圖像大小link。調整大小後,您可以將其放置在imageview中。希望對你有幫助。

0

我建議你使用這個AsyncImageView。我已經使用它,它創造奇蹟。要調用此API:

ASyncImage *img_EventImag = alloc with frame; 
NSURL *url = yourPhotoPath; 
[img_EventImage loadImageFromURL:photoPath]; 
[self.view addSubView:img_EventImage]; 

與使用UIImageView相同。簡單,它爲你做大部分事情。 AsyncImageView在UIImageView中同時包含一個簡單的類別,用於在iOS上異步加載和顯示圖像,以便它們不鎖定UI,以及用於更高級功能的UIImageView子類。 AsyncImageView適用於URL,因此可以與本地或遠程文件一起使用。

加載/下載的圖像緩存在內存中,並在發生內存警告時自動清除。 AsyncImageView獨立於UIImage緩存運行,但默認情況下,位於應用程序捆綁包根目錄中的任何圖像都將存儲在UIImage緩存中,以避免重複緩存圖像。

該庫還可用於獨立於UIImageView加載和緩存圖像,因爲它提供對底層加載和緩存類的直接訪問。

+0

AsyncImageView有一個缺點,當在tableView中使用時顯示重複的圖像。 :( –

0

SDWebImage是開源庫。將源代碼添加到您的項目並在SDWebImageDownloader.m中添加您的尺寸檢查