手游中常用的圖片格式分為png8、png24、jpg和pvr。png8要么完全透明,要么完全不透明,而png24支持半透明,jpg完全不透明,pvr支持半透明,并且是大部分手機(jī)顯卡直接支持的,不需要額外的解析。
從體積大小上比較各種格式:pvr ≈ png24 > jpg > png8
從解析效率和內(nèi)存峰值上比較: jpg > png24 = png8 > pvr
那么我們?cè)谶M(jìn)行圖片資源優(yōu)化時(shí)有哪些原則和方法呢?
- 舍棄pvr。時(shí)至今日,幾乎所有手機(jī)的顯卡都已經(jīng)支持pvr,但是為何大家都不選擇pvr呢?pvr的唯一優(yōu)點(diǎn)是其能夠給大部分手機(jī)的顯卡直接支持,不需要解析就能渲染,但是硬件性能的提升已經(jīng)讓這唯一的優(yōu)勢(shì)蕩然無(wú)存了。
- 不透明的背景圖全都使用jpg。jpg最大的優(yōu)勢(shì)便是體積小,雖然顯卡在解析jpg時(shí),需要復(fù)制兩份圖片數(shù)據(jù)導(dǎo)致內(nèi)存峰值很高,但是內(nèi)存峰值的問(wèn)題,在目前的硬件條件下已經(jīng)不再是大問(wèn)題了。
- 需要支持透明的圖片都使用png24。為什么這里不選擇png8?因?yàn)閜ng8能夠存儲(chǔ)的顏色數(shù)量有限,簡(jiǎn)而言之就是png8不夠艷,在這個(gè)拼臉的時(shí)代里,顏值不高就什么都不對(duì)了。
- 安裝包太大,老板說(shuō)“你丫的快給老子把安裝包壓縮到80M以內(nèi)”怎么辦?使用jpg+png8。jpg之所以不支持透明,是因?yàn)樗淮鎯?chǔ)透明通道信息,而png8正好可以存儲(chǔ)透明通道信息,所以我們就可以把一張png24的圖拆成一張jpg和一張png8,壓縮比在90%左右,這個(gè)壓縮比非??捎^,缺點(diǎn)就是解析比較慢,內(nèi)存峰值也比較高。程序在讀取圖片時(shí),首先解析jpg,拿到RGB通道數(shù)據(jù),然后解析png8,拿到A通道數(shù)據(jù),再生成一個(gè)新的空紋理,將得到的RGB數(shù)據(jù)和A數(shù)據(jù)賦值給這個(gè)新的空紋理,就得到了包含ARGB的紋理了,再交給顯卡去渲染。因?yàn)橐馕鰞蓮垐D片,所以解析時(shí)間是通常的兩倍,內(nèi)存峰值也是png24的2.5倍(png24是2,png8是2,jpg是3,jpg + png8就是5)。
- 使用一些圖片壓縮工具將圖片體積變小。比如PP鴨,這個(gè)工具挺好使的,工具的制作團(tuán)隊(duì)開(kāi)發(fā)的MarkMan也是個(gè)小神器。
另外說(shuō)一點(diǎn),美術(shù)作圖時(shí)一定要考慮重用性 美術(shù)作圖時(shí)一定要考慮重用性 美術(shù)作圖時(shí)一定要考慮重用性