PNG:php
便攜式網絡圖形(Portable Network Graphics,PNG)是一種無損壓縮的位圖圖形格式,支持索引、灰度、RGB三種顏色方案以及Alpha通道等特性。PNG的開發目標是改善並替換GIF做爲適合網絡傳輸的格式而不需專利許可,因此被普遍應用於互聯網及其餘方面上。算法
PNG另外一個非正式的名稱來源爲遞歸縮寫:「PNG is Not GIF」。網絡
因爲PNG是無損壓縮,那也就意味着他能夠從新精確的改造原圖片(1.過濾,2.壓縮)。編碼
1.過濾(Filtering)spa
差分編碼:又叫增量編碼,差分編碼的簡單例子是儲存序列式資料之間的差別(而不是儲存資料自己):不存「2,3,4,5,6,7,8」,而是存「2,1,1,1,1,1,1」。orm
[2,3,4,5,6,7,8] can become [2,1,1,1,1,1,1], where遞歸
[2, 3–2=1, 4–3=1, 5–4=1, 6–5=1, 7–6=1, 8–7=1]索引
單獨使用用處不大,可是在序列式數值常出現時能夠幫助壓縮資料。因爲改變一般很小(平均佔所有大小的2%),差分編碼能大幅減小資料的重複。一連串獨特的delta檔案在空間上要比未編碼的相等檔案有效率多了。Windows中的差分壓縮也是利用這種編碼方式圖片
PNG圖片存儲用的也是差分編碼便是Filtering。ip
2.壓縮
主要用到LZ77壓縮算法。
參考:https://medium.com/@duhroach/how-png-works-f1174e3cc7b7
關於PNG的格式:
若是不用透明(alpha),RGBA 32bpp選項會浪費圖片大小的 ¼,能夠用24bpp truecolor format (or just use JPG).固然,若是圖片包含灰圖模式的數據,你應該只用8bpp.存儲。總之,像素存儲格式,選擇須要用心呀。
INDEXED format.
INDEXED color mode, basically chooses the best 256 colors to use, and replaces all your pixels with an index into that color palette. The result, is a reduction from 16 million colors (24bpp) to 256, which is a significant savings.
參考:https://medium.com/@duhroach/reducing-png-file-size-8473480d0476#.ut4mvxkcv