kysonFramework之圖片下載器(附帶壓縮功能)

本系列博客是本人的開發筆記。爲了方便討論,本人新建了一個微信羣(iOS技術討論羣),想要加入的,請添加本人微信:zhujinhui207407,【加我前請備註:iOS 】,本人博客http://www.kyson.cn 也在不停的更新中,歡迎一起討論

我先掃個盲,大概說一下圖片下載的原理:
大家知道,不一樣的圖片肯定有不一樣的url,你可以這麼理解:http://xxx.com/1.png (以下簡稱圖片1)和 http://xxx.com/2.png(以下簡稱圖片2) 肯定是兩個不一樣的圖片。這個不難理解吧。然後繼續,既然圖片1和圖片2 不一樣,那麼如果圖片1已經下載到本地了,如何確保第二次不要再去下載圖片1 呢,這裏就涉及到緩存的概念了。我們要在本地將圖片1緩存起來,然後第二次如果要下載圖片1那就先去本地看看有沒有圖片1,如果有的話就直接從本地讀取,沒有的話再去下載。這個應該也不難理解了。
最後的難點就是我們怎麼知道圖片1已經下載過了,然後第二次就不用下載呢。前面已經說過了,既然不一樣的url對應不一樣的圖片,那我們將圖片緩存到本地的時候直接使用url作爲文件名不就可以了麼。對的,原理是這個原理,但你要知道url是帶有類似冒號和斜槓等特殊字符的字符串,所以作爲文件名肯定是不合適的,那麼這個時候我們可以通過一對一加密來實現。
大概意思就是,如果url是唯一的,那麼加密後的字符串也是唯一的,那麼基本上就能唯一確定到這張圖片了。這樣的加密算法還是很多的,但能生成作爲文件名的算法又比較好用的就是MD5加密了。
至於你說的情況,其實按道理在真實情況下是不會出現的。你可以這麼思考,如果一個輪播圖,上面的5張圖片都是一樣的,那這個輪播又有什麼意義呢。但是,既然你提出來這個問題了,我也適當的說一下,其實解決的辦法的思路無非是你每次下載圖片的時候將圖片url存到一個字典裏或者數組裏,然後再次下載的時候先去字典或者數組裏找一下,如果有的話就不下載,靜靜等待下載完,否則就下載。
說了這麼多原理,如果您還有疑問的話可以參考一下我寫的文件下載器:zjh171/AutoLoadImageView · GitHub 這個圖片下載器是相較於SDWebImage一個輕量級的實現,但一定能讓你很簡單的瞭解到下載圖片,緩存圖片的整個過程。圖片下載器的相關文檔可以在我的博客裏找到:AutoloadImageView(kysonFramework之圖片下載器(附帶壓縮功能) - Hello World) ,因爲是英文的,如果有任何疑問的話歡迎提出來,或者聯繫我。


以上
作者:朱朱
鏈接:https://www.zhihu.com/question/22163365/answer/50434520
來源:知乎
著作權歸作者所有,轉載請聯繫作者獲得授權。


Image download is a common requirement in iOS development.Some famous third party library like SDWebImage are good choice to us,but sometimes it is not necessary to use this kind of fat library, to implement a our own Imagedownloader is a good practice.We also can do some custom setting like cache directory by myself.

This is the class diagram of my ImageDownloader,it is very simple but can implement image download fine.you can get it at github:AutoLoadImageView

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章