轉自:https://blog.csdn.net/chqj_163/article/details/117220903
ASTC中ARM研發的一種貼圖壓縮格式,從iOS9(A8架構)開始支持ASTC壓縮格式 ,相對於PVRTC2/4而言,ASTC(4X4)的壓縮比會增加到0.25,不過顯示效果也會好很多,而且不要求圖片長寬相等且為2的冪次方。支持Android OpenGL ES 3.1 和 Vulkan 設備。
支持的GPU:
tvOS (all), iOS (A8), Android (PowerVR 6XT, Mali T600 series, Adreno 400 series, Tegra K1).
如果GPU不支持這種壓縮格式,則解壓為RGB或者RGBA。會增加cpu解壓時間,並占用較多內存。
2016年之后的安卓手機基本支持這種壓縮格式
iphone6以及之后的機型支持這種壓縮格式
圖片壓縮核心思想是將大圖分為多個顏色塊,每個顏色塊固定大小為16-bytes,單個顏色塊里的顏色像素怎么划分不關心。意思是將圖片分成多個顏色塊,每個顏色塊固定大小為16-bytes,但是每一個16-bytes的顏色塊中放多少個像素是可選的,分別為4x4,5x5,6x6,8x8,10x10和12x12,單顏色塊中放的像素越多那么壓縮率越高,相應的質量也越差。
公式
像素大小 = 16-bytes / 分塊寬高 * 8-bit;
壓縮率 = 原始像素大小(32-bit) / 像素大小;
圖像大小 = 原始圖片大小 / 壓縮率;
假設一張4MB的1024*1024原始圖片:
塊寬高 | 像素大小(bits) | 壓縮率 | 壓縮后圖片大小 |
---|---|---|---|
4*4 | 8 | 4 | 1MB |
5*5 | 5.12 | 6.25 | 655KB |
6*6 | 3.56 | 8.99 | 455.62KB |
8*8 | 2 | 16 | 256KB |
10*10 | 1.28 | 25 | 163KB |
12*12 | 0.89 | 35.95 | 113.93KB |
圖片大小(MB)=長x寬x像素大小(bits)/8/1024/1024
另一方面也是由於ASTC一個對效果以及壓縮率的更好支持
我們以一張512*512的圖片為例
在RGB32bit的情況下 他所占用的內存為多少呢 512*512*(32/8)bit = 1M
壓縮為ETC2 4 bits后容量為170.7KB,有明顯失真,
壓縮為ASTC 6x6后容量為154.7KB,無明顯失真,
ASTC 6x6的容量小於ETC2 4 bits,壓縮質量高於ETC2 4 bits。
壓縮為ASTC 8x8后容量與ASTC 6x6相比減小了約44.8%,
壓縮為ASTC10x10后容量與ASTC 8x8相比減小了約33.7%。