今天繞來繞去又繞到這個問題了奈应,最近在寫的APP,類似微博需要上傳圖片到服務(wù)器账磺,那么就想著這個圖片的壓縮問題芹敌,如果一股腦的把iPhone拍攝的原圖傳送到服務(wù)器,費時垮抗,費流量氏捞,費空間。
此外借宵,還有圖片的下載和展示幌衣,同樣是一個問題,有時候加載慢壤玫,好久圖片都顯示不出來豁护,具體的原因的到底是下載慢還是展示慢?
雖然現(xiàn)在有一些解決的方案欲间,但目前的結(jié)果楚里,僅僅是勉強可以接受,不知道是不是有更好的方案猎贴,所以帶著這些問題班缎,查閱了一些資料。
這邊僅保存/推薦一些我覺得不錯的文章她渴,供自己/大家參考达址,并不把具體的內(nèi)容進行詳細的闡述。
首先來聊聊第一個問題趁耗,就是上傳時候的壓縮沉唠。正如壓縮二字的描述,圖片的壓縮苛败,分兩方面满葛,一是指壓,即降低圖片的質(zhì)量罢屈,二是縮嘀韧,減小圖片的尺寸。
從原理上說缠捌,我覺得知乎的這篇文章圖片壓縮(iOS)锄贷,講解的不錯:
文章中除了減小圖片尺寸/降低圖片質(zhì)量這兩個方案外,還提及了改變圖片格式,降低像素中每個 color component 的 depth這兩種壓縮方案谊却。
至于具體的實現(xiàn)方案蹂随,可以參考下這篇iOS 圖片壓縮方法
我目前的實現(xiàn)方案也是參照這個寫的,主要是壓縮并用使圖片文件小于指定大小因惭,然后上傳。
nshipster有一篇專門討論Image Resizing的文章Image Resizing Techniques
這篇文章可以用來指導(dǎo)我們在需要減小圖片尺寸绩衷,可以使用的方案蹦魔,包括例如:
- Drawing to a UIGraphicsImageRenderer
- Drawing to a Core Graphics Context
- Creating a Thumbnail with Image I/O
- Lanczos Resampling with Core Image
- Image Scaling with vImage
再看看第二個問題,就是圖片下載和展示的問題咳燕,一般我們用SDWebImage勿决,所以不太關(guān)心這個問題。
2018 WWDC 蘋果官方給出了關(guān)于iOS圖像處理的最佳實踐:Image and Graphics Best Practices
推薦大家首先先看看這個視頻招盲,官方文檔低缩,必屬精品。
接下來推薦給大家的就是這個session的復(fù)盤總結(jié):iOS圖像最佳實踐總結(jié)
網(wǎng)上有蠻多這個Session的復(fù)盤總結(jié)文章曹货,個人覺得這篇不錯咆繁,不但有分析總結(jié),還有較為全面的延伸拓展顶籽。
SwiftGG也有一篇類似的文章:圖像優(yōu)化
最后討論正確的網(wǎng)絡(luò)圖片加載方式玩般,其實這里SDWebImage或者YYWebImage等框架已經(jīng)給出了正確的姿勢,細節(jié)可以挑其中一個閱讀源碼即可礼饱。
大概的思路就是
- 異步下載圖片數(shù)據(jù)源,進行內(nèi)存/磁盤緩存
- 異步解碼镊绪,解碼后的數(shù)據(jù)放入內(nèi)存緩存中
- 回調(diào)主線程渲染圖片
- 緩存管理