最有效地使用PNG:PNGOUT優化

原文作者:Jeff Atwood

說起互聯網上使用的圖像格式,通常來說也就這3種:JPEG、GIF和PNG。具體使用哪種格式,相對而言也很容易做決定:如果你要保存的是連續色調的攝影圖片,那就選擇有損的JPEG;如果你要保存的圖片裏有大量同色塊(或者顏色相近的色塊),那就選擇無損的GIF或者PNG。如果你對這兩類圖像格式之間的區別還不甚瞭解,可以翻一翻我以前的一篇博文。不過,GIF與PNG之間的選擇是沒有爭議的。PNG針對GIF做了極大的改進,是更加現代版的GIF;GIF已然被PNG淘汰了。除非你身處下面這兩種場景,否則的話,你應該總是選擇PNG(而不是GIF):

  1. 你想要一個動畫。PNG不支持動畫,GIF支持。
  2. 你的圖像極其小,差不多隻有幾百字節。根據我的經驗,GIF文件大小在這種情況下會更小一些。

在任何其他情況下,PNG都是GIF的天然替代品。PNG還沒有版權問題,它可以存儲所有位深,支持Alpha通道,可以提供更加高效的壓縮。PNG真是棒極了!不過,你還須瞭解PNG的幾件事情,以便最有效地使用它。

讓我們來看一個具有代表性的圖像吧。我對CodingHorror.com這個網站做了一次截屏,連帶着瀏覽器、透明效果以及陰影。ClearType字體渲染是開着的。這個圖很好地混合了文字、圖片和用戶界面。採用無損的PNG文件格式是再好不過的選擇了,因爲這個圖裏有大片區域的同色塊,它們之間的界限分明。這正是我們所希望的!


截屏的實際尺寸爲1233 x 946。當我在Paint Shop Pro把它保存爲24位的PNG文件時,我看到下面兩種文件大小:

  • PNG(交錯格式) 288 KB
  • PNG(非交錯格式)   212 KB

於是,我們有了第一條經驗:永遠別保存交錯格式的PNG文件

  • 僅僅是爲了漸進式渲染,交錯式PNG會增大35%;
  • 漸進式渲染讓人很困惑:圖像一開始是模糊的,然後漸漸變清晰。Philip Greenspun一語道破,“讀者無法判斷圖像何時加載完畢!”
  • 標準的PNG爲漸進式渲染提供了完美的解決方法,根本用不着交錯格式。它們可以自頂向下,以一種很簡單直接的方式渲染。

對於一張這麼大而且細節豐富的圖像來說,壓縮到212 KB已經很了不起了。這也是PNG圖像壓縮效率高的有力證明!不過,我們可以做得更好!如果我們使用Ken Silverman的PNGOUT(下載地址:http://advsys.net/ken/utils.htm)處理一下這兩個文件,我們可以把它們壓縮得更小:

  • PNG(交錯格式) 190 KB
  • PNG(非交錯格式)   190 KB

首先,請注意到,PNGOUT摒棄了交錯格式。如果你的原始PNG圖像是交錯格式的,你可以預期文件尺寸會被大大減小。但即使你的PNG不是交錯格式的,PNGOUT也可以把文件減小22 KB(也就是大約10%)。我知道,感覺也沒有瘦身很多,但PNG是無損壓縮啊!JPEG是有損的,因此當文件尺寸減小的時候,圖像質量會越來越差。而PNG不會丟失任何圖像細節,我們只是讓它們更小了。同學們,這是免費帶寬啊!還有比這更好的事嗎?

爲了看一看PNGOUT的真實效率,我對/images目錄下的一個子集運行了這個工具。需要說明的是,這些圖像之前已經優化過了;我定期對這個目錄裏的每一個文件都運行OptiPNG。

 OptiPNGPNGOUT
267個PNG文件4.40 MB4.04 MB

工具運行耗費了一些時間,不過,我們爲PNG圖像獲得了額外9%的尺寸縮減,而這是使用OptiPNG未曾辦到的。這怎麼可能呢?

我剛聽到Ken Silverman這個名字的時候,覺得似曾相識。Ken是PNGOUT的作者,他竟還是《Duke Nukem 3D》遊戲渲染引擎的原始創作者,那時這位神童才18歲。


Ken是如此之出色,甚至John Carmack——《毀滅戰士》和《雷神之錘》兩款遊戲的作者,在編程界被公認爲神一般的存在——都尊敬他。難怪他的這個小小PNG優化器,能夠橫掃千軍。非常看好他!

如果你在運營一個網站,不管網站規模如何,也不管你用了多少PNG圖片,你都應該使用PNGOUT來減小它們的尺寸。PNGOUT還能順便把現存的GIF圖像轉成更爲優秀的PNG格式。這個工具用起來也極其方便!下面的這條Windows命令,就能批量優化一個文件夾裏的所有PNG圖片:

for %i in (*.png) do pngout "%i" /y

使用PNGOUT的優化過程並不是特別快,但這沒關係。一次性的優化能夠降低圖像使用帶寬10%~30%。何樂而不爲呢?

發佈了58 篇原創文章 · 獲贊 1581 · 訪問量 156萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章