圖片款=(480/480)*400=400
占用內(nèi)存為300*400*4=480000
那么它占用內(nèi)存為什么是變化的?
Android會先解析圖片文件本身的數(shù)據(jù)格式,然后還原成Bitmap對象,Bitmap的大小就跟上面的計(jì)算方式相關(guān)聯(lián)。
再舉例1080*452的png圖片,圖片占用存儲空間大小為56kb,內(nèi)存如圖:
上圖一目了然,不同狀態(tài)下,占用內(nèi)存不一樣,想明白這點(diǎn)是很重要的,一個應(yīng)用可能有上百張圖片,小到幾B大到幾MB,很容易占用大量內(nèi)存。
所以,對應(yīng)的設(shè)計(jì)圖,對應(yīng)的切圖放在對應(yīng)的文件夾很重要,否則一不小心就得炸裂。
??圖片存在的幾種形式
File形式,即存在于我們的磁盤中,我們通常說的圖片大小也就是這個大小。
Stream就是流的形式,比如我們?yōu)g覽的各種網(wǎng)絡(luò)圖片,都是實(shí)時加載的。
Bitmap形式,就是我們通常指內(nèi)存中圖片的大小,同一張圖片處理不好在不同設(shè)備會占用不同的內(nèi)存大小。
像素密度
像素密度是指設(shè)備每英寸像素的數(shù)目,這個和資源文件里面的mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi密不可分。
色彩模式
它是一種算法形式,是在虛擬世界里表示顏色的,她有多個模式,Android中我們嘗嘗在Bitmap中使用,而且多是Config來設(shè)置,但具體每個都代表什么意思呢。
Alpha_8:只存儲了位圖的透明度,沒有顏色信息,每個像素都需要1個字節(jié)的內(nèi)存來存儲信息。
ARGB_4444:每個4都是有意義的,4個4即ARGB,A(Alpha)4位的精度,R(Red)4位的精度,G(Green)4位的精度,B(Blue)4位的精度,也就是一個像素會占用兩個字節(jié)內(nèi)存來存儲,而且存儲了圖片的透明度和顏色信息。屬于質(zhì)量較低的配置。
ARGB_8888:這個類型ARGB_4444的原理基本一致的,只是A,R,G,B各占8個位的精度,所以一個像素占4個字節(jié)的內(nèi)存。占的多了用的空間也多了,自然能顯示的內(nèi)容也就多了,因此改類型的位圖質(zhì)量較好,一般情況下默認(rèn)使用這個,同時也是推薦的配置。
RGB_565:經(jīng)過上面的介紹,大概猜到565說的是誰了,沒錯:R占5位精度,G占6位精度,B占5位精度,一共是16位精度,算下來是兩個字節(jié)的內(nèi)容。不過這個因?yàn)闆]有A(Alpha),所以是不支持透明度信息的,如果對圖片要求苛刻且沒有透明度,相比ARGB_8888是個更不錯的選擇
??什么是質(zhì)量壓縮?
質(zhì)量壓縮通常是不改變尺寸的情況下進(jìn)行像素質(zhì)量壓縮,肉眼可能難辨,但是進(jìn)行放大對比就能對比出差異。這種壓縮形式會改變圖片在硬盤存儲中的大?。ㄒ簿褪荈ile文件的大小),對于內(nèi)存中的大小影響,作用很小。
原理是:主要實(shí)現(xiàn)手段是通過算法將某個像素點(diǎn)周圍的像素進(jìn)行處理同化,將像素降低質(zhì)量或減少,進(jìn)而達(dá)到壓縮的目的,同時也改變了文件大小。另外PNG雖然是無損格式的,但仍然可處理,只不過效果小,得不到理想程度,一般都是針對JPG格式圖片處理。
應(yīng)用場景:圖片的上傳下載。
??什么是尺寸壓縮?
圖片的尺寸壓縮是指:按照一定的倍數(shù)對圖片減少單位尺寸的像素值,本來1個單位有6個像素點(diǎn),壓縮后1個單位有2個像素點(diǎn),不僅可以改變圖片在內(nèi)存中的大小,也會改變圖片在硬盤中的大小。
這個最容易理解了,就像現(xiàn)實(shí)三維世界一樣,普遍情況下尺寸越小的東西重量越輕。
原理是:通過減少單位尺寸的像素值,真正意義上的降低像素值。
應(yīng)用場景:用戶頭像的縮略圖,聊天過程中的縮略圖等。
??經(jīng)驗(yàn)
首先推薦給大家一個壓縮網(wǎng)站https://tinypng.com/
一般做過圖片優(yōu)化的可能都知道這個網(wǎng)站,畢竟一搜索這家伙就排在搜索引擎第一位,但Android開發(fā)新手可能沒了解過。
這個網(wǎng)站壓縮圖片非常非常的棒,它壓縮的是原始文件,壓縮后即使你放大,從視覺上基本也看不出什么差別,屌爆了,OMG的,用它。
我已經(jīng)養(yǎng)成習(xí)慣,用圖片前一般都會壓縮。它是有客戶端的,界面如下。
接著回到我們Android技術(shù),官方有個BitmapFactory類,提供了很多解析方法
decodeStream方法一般出來從網(wǎng)絡(luò)過來的圖片,
decodeFile方法可以搞sd卡里面的圖片
decodeResource方法處理資源文件里面的圖片。
這些方法會為創(chuàng)建的Bitmap分配內(nèi)存,如果圖片過大的話就會導(dǎo)致 OOM。
看上面圖片的注釋BitmapFactory.Options提供了一個參數(shù)inSampleSize,可以幫助實(shí)現(xiàn)壓縮。
看個例子:
假設(shè)我們有個6666*6666辣么大的圖,設(shè)置了inSampleSize為6,那么加載到內(nèi)存中的就是1111*1111像素的圖,寬高各是原來的1/6,那所占用的空間理論上應(yīng)該是1/36。
注意:inSampleSize的值需要是2的倍數(shù),小于1則默認(rèn)為1,如果是奇數(shù)則默認(rèn)減1
實(shí)現(xiàn)尺寸壓縮:
質(zhì)量壓縮無法避免oom,但可以改變圖片在磁盤中或者說是File文件的大小,尺寸壓縮可以避免OOM,但不改變圖片本身的大小,只改變加載是在內(nèi)存中的大小,即bitmap。
講完整體壓縮,我們再來介紹另一個場景:手機(jī)一屏顯示不小的超大圖!!
比如:3840*2160的高清壁紙。
上面的壓縮方案肯定導(dǎo)致圖看不清,體驗(yàn)極差。
所以我們就得采用局部顯示來展示圖片。
Android為我們提供了一個類:BitmapRegionDecoder來局部展示圖片的,它能后實(shí)現(xiàn)展示圖片的指定區(qū)域。
-
BitmapRegionDecoder提供了一系列的newInstance來進(jìn)行初始化,支持傳入文件路徑,文件描述符和文件流InputStream等
-
之后借助decodeRegion方法來指定顯示的區(qū)域。
-
最后再加上一些手勢操作即可。
文章鴻洋大神已經(jīng)有教程了,在此不贅述。
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Android工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機(jī)構(gòu)動則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Android移動開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Android開發(fā)知識點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內(nèi)容對你有幫助,可以添加V獲?。簐ip204888 (備注Android)
學(xué)習(xí)分享
在當(dāng)下這個信息共享的時代,很多資源都可以在網(wǎng)絡(luò)上找到,只取決于你愿不愿意找或是找的方法對不對了
很多朋友不是沒有資料,大多都是有幾十上百個G,但是雜亂無章,不知道怎么看從哪看起,甚至是看后就忘
如果大家覺得自己在網(wǎng)上找的資料非常雜亂、不成體系的話,我也分享一套給大家,比較系統(tǒng),我平常自己也會經(jīng)常研讀。
2021最新上萬頁的大廠面試真題
七大模塊學(xué)習(xí)資料:如NDK模塊開發(fā)、Android框架體系架構(gòu)…
只有系統(tǒng),有方向的學(xué)習(xí),才能在段時間內(nèi)迅速提高自己的技術(shù)。
這份體系學(xué)習(xí)筆記,適應(yīng)人群:
**第一,**學(xué)習(xí)知識比較碎片化,沒有合理的學(xué)習(xí)路線與進(jìn)階方向。
**第二,**開發(fā)幾年,不知道如何進(jìn)階更進(jìn)一步,比較迷茫。
**第三,**到了合適的年紀(jì),后續(xù)不知道該如何發(fā)展,轉(zhuǎn)型管理,還是加強(qiáng)技術(shù)研究。
由于文章內(nèi)容比較多,篇幅不允許,部分未展示內(nèi)容以截圖方式展示 。
一個人可以走的很快,但一群人才能走的更遠(yuǎn)。不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都?xì)g迎掃碼加入我們的的圈子(技術(shù)交流、學(xué)習(xí)資源、職場吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習(xí)成長!
線與進(jìn)階方向。
**第二,**開發(fā)幾年,不知道如何進(jìn)階更進(jìn)一步,比較迷茫。
**第三,**到了合適的年紀(jì),后續(xù)不知道該如何發(fā)展,轉(zhuǎn)型管理,還是加強(qiáng)技術(shù)研究。文章來源:http://www.zghlxwxcb.cn/news/detail-859641.html
由于文章內(nèi)容比較多,篇幅不允許,部分未展示內(nèi)容以截圖方式展示 。
一個人可以走的很快,但一群人才能走的更遠(yuǎn)。不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都?xì)g迎掃碼加入我們的的圈子(技術(shù)交流、學(xué)習(xí)資源、職場吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習(xí)成長!
[外鏈圖片轉(zhuǎn)存中…(img-NHyayC3f-1712689619487)]文章來源地址http://www.zghlxwxcb.cn/news/detail-859641.html
到了這里,關(guān)于Android修行手冊-基礎(chǔ)優(yōu)化系列圖片篇,ios音視頻面試內(nèi)容的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!