知名圖片壓縮格式PNG蝙寨,在使用大部分制圖軟件導(dǎo)出時(shí)可以選擇PNG-8,PNG-24或者PNG-32嗤瞎。本文將介紹這三種PNG之間有什么不同墙歪。
圖片的編碼
首先要是想要完整的保存一張圖片上的全部信息,自然是要把每個(gè)像素點(diǎn)的色值全部記錄下來贝奇。按照這個(gè)方式來編碼圖片虹菲,那么圖片的大小就是:
像素?cái)?shù)量 × 每個(gè)像素包含信息的字節(jié)長(zhǎng)度
例如一張1080×720大小的圖片,假設(shè)每個(gè)像素的深度(所占的bit個(gè)數(shù))是24掉瞳,那么這張圖片的原始信息大小自然就是:
1080*720*24 = 17.80Mb = 2.2MB
看到這個(gè)數(shù)字意味著一張1080P桌面的壁紙需要2.2MB的存儲(chǔ)空間毕源,然而現(xiàn)在隨便在網(wǎng)上找一張這樣尺寸的PNG圖片可能都占用不了1MB的空間。所以圖片在PNG文件中是如何編碼的呢陕习?
PNG的像素格式
首先PNG作為無損壓縮的圖片文件霎褐,本質(zhì)上對(duì)圖片編碼的方式和上文提到按照像素編碼方式并沒有太大的不同,但是他有多種不同的像素深度和像素格式可以選擇衡查。我們拋開只有黑白的灰度圖不說瘩欺,彩色的PNG像素格式就是標(biāo)題中提到的三種:8,24拌牲,32俱饿。
PNG-32
PNG-32每個(gè)像素的深度為32bits,其中RGBA四個(gè)通道各占8bits塌忽。所謂的RGBA四個(gè)通道拍埠,就是紅,綠土居,藍(lán)枣购,透明 這四種色值各自的大小,都用8bits來表示(0~255)棉圈。
PNG-24
同理涩堤,PNG-24的像素深度為24bits,其中RGB三個(gè)通道各占8bits分瘾。PNG-24因?yàn)闆]有Alpha通道(透明通道)胎围,所以不支持透明圖片。
PNG-8
上述兩種像素格式都非常好理解德召,但是似乎按照那種方式來存儲(chǔ)圖片并不會(huì)讓圖片變小白魂。PNG-8則作出了一些變動(dòng),他將圖片中用到的每種顏色都存儲(chǔ)在一個(gè)長(zhǎng)度為255的數(shù)組中上岗,稱之為條色盤福荸,然后每個(gè)像素上存儲(chǔ)對(duì)應(yīng)顏色在條色盤上的位置。因?yàn)轭伾舷奘?55種肴掷,所以每個(gè)像素只需要8bits就可以表示對(duì)應(yīng)的顏色信息敬锐。這種表示顏色的方式也被稱之為索引色。
PNG-8相比之下確實(shí)使用了更少的空間來存儲(chǔ)顏色捆等,但是他能表達(dá)的顏色種類是有上限的滞造,所以在將PNG-32轉(zhuǎn)換成PNG-8時(shí)會(huì)在一些顏色過渡的地方會(huì)明顯的看到不平滑的漸變。
其他
介紹了三種像素格式的區(qū)別栋烤,但是并沒有很好的解釋為什么PNG文件會(huì)比直接用像素來表示圖片小那么多谒养。其實(shí)這主要是經(jīng)過Filtering 和 DEFLATE壓縮
后,才真正將文件大小縮小的明郭。具體圖片的壓縮和解壓過程买窟,可以參考PNG的故事。