跳至內容

PNG

出自Taiwan Tongues 客語維基
這是此頁批准,以及是最近的修訂。

做得摎式網路圖形(英語:PortableNetworkGraphics,PNG)係一種支援失真壓縮个點陣圖形格式,𢯭手索引、灰度、RGB 三種色方案還過 Alpha 通道這兜特性。PNG 个開發目標係愛改善同時取代 GIF 作為適合網路傳輸个格式毋使專利許可,所以受著當多應用在網際網路摎其他方面上。

PNG 另外一個非正式个名稱係來源為遞迴縮寫:「PNG isNotGIF」。 PNG 个官方念法係「平」(英語 IPA:/ pɪŋ /;「 平」好用國語發音), 毋過大部分个人係準做三個英文字母分開來讀。

PNG 圖片大部分人都用 ` PNG ` 作為副檔名,其他網路媒體類型係 ` image / png `。PNG 在一九九七年三月做知識性 RFC 二千空八十三發布,在二零零四年 ISO / IEC 標準發布。

特性

  • 支援兩百五十六色調色盤技術以產生細體積檔案
  • 最高支援二十四位元真彩色个圖像還過八個元灰度圖像。
  • 支援 Alpha 透明个道路 / 半透明特性。
  • 支援圖像亮度个 Gamma 校準資訊。
  • 支援儲存附加文字資訊,以保留圖像名稱、作者、著作權、創作時間、注解這兜資訊。
  • 𢯭手失真壓縮。
  • 漸漸仔顯示摎串流讀寫,適合在網路傳輸中快速顯示預覽效果以後再過展示全貌。
  • 使用 CRC 防止檔案出差錯。
  • 盡新个 PNG 標準允准在一個檔案記憶體儲多幅圖像。

版本同歷史

一九九五年早期,Unisys 公司根據佢在該 GIF 格式中使用个 LZW 資料壓縮演算法个軟體專利(米國第四千五百五十八三百空二號)開始商業收費。為著避免專利影響,用於表現單張圖像个 PNG、用來表現動畫个 Multiple-image Network Graphics 圖形檔案格式同時建立出來。十九九九年八月,Unisys 公司進一步停止咧對自由軟體摎非商用軟體開發者个 GIF 專利免費个許可,從而使 PNG 格式得著還較多个關心。

在 PNG 傳播過程當中,已多網路看吔嘛器經過當長時間正開始完全支援 PNG 格式;像係 Microsoft Windows 按算个 Internet Explorer 瀏覽器一直到七千五百空版正支援 PNG 格式當中个半透明效果,較早期个版本(比將講六趴零 SP 一)需要檔落 Hotfix 也係由網站提供另外个 Script 去支援。這造成 PNG 格式並無得著廣泛个認知。

  • PNG 个一千空版本規範在一九九六年七月初一發布,後來安到 RFC 二千空八十三隻標準,並在一九九六年十月一號成為 W 三 C 建議。
  • PNG 个一千擔一版本進行了部分細幅修改過增加了三個新个資料塊定義,在一九九八年十二月三十一發布。
  • PNG 个一千八百五十二個版本增加了另外一個資料塊,將在一九九年八月十一發布。
  • PNG 現版本係國際標準(ISO/IEC 一千九百四十八 : 二千空三), 並在二零零三年十一月十號作為 W 三 C 建議發布。這個版本摎一千七百二十二版單淨細細仔差別。

另外也產生了基於 PNG 个動畫格式:一九九六年六月提出 PNF(Portable Network Frame)草案,當年八月改名安到 MNG(Multiple-image Network Graphics), 毋過因為恁呢過複雜,實現支援个軟體較少。二零零四年底,PNG 个動畫擴大—— APNG,受著提出來。這係一個相對 MNG 還較簡單个動畫實現方案,毋辨識 APNG 格式个 PNG 解碼器至少能夠正常回放第一幅普通 PNG 畫面,相反地泥得著大部分顯示抑編輯个軟體支援。

檔案結構

儲存型別

PNG 圖片主要係由三種型別儲存* PNG 八 : 圖片使用八 bits 來儲存,做得用二个八擺方大細個種類色來儲存一張烏白个圖片。也就係講 PNG 八能儲存兩百五十六種个色,因為色少,檔案體積也當細哦,一張圖片,摎佢設定做 PNG 八个圖片係當省空間合適个。

  • PNG 二十四 : 圖片使用二十四號 bits 來儲存,用三隻八 bits 分別去表示 R(紅)、 G(綠色)、 B(藍色)三個通道 ( Channel ) 个數值。做得表達兩百五十六乘上兩百五十六乘上兩百五十六=一千六百七十七十二種个色目,色彩豐富度還較高,毋過相對个所佔用个空間乜就還較大吔。* PNG 這頂高个三十二個 : 圖片使用著三十二pa24 bits 來儲存,相當於 PNG 二十四加上八 bits 个透明色通道,總共有 R(紅)、 G(綠色)、 B(藍色)、 A(透明)四個通道。圖片做得表示个色彩同 PNG 二十四共樣多,同時還支援兩百五十六種个透明度,使得圖片个色彩更加豐富。

檔案資料會造成

PNG 圖像格式个檔案由一個八位元組个 PNG 檔案標識(filesignature or file header)域同三個以上个後續資料塊 ( chunk ) 像係:IHDR、IDAT、IEND 等組成。

PNG 檔案包含八位元組檔案署名( 八十九五十四 E 四十七零 D 零 A 一 A 零 A,十六進位), 用來認識 PNG 格式,所有 PNG 圖片檔案內容開頭都會有這一串 header。

PNG 定義了兩種類型个資料塊:一種係 PNG 檔案必須愛包含、讀寫軟體也定著愛支援(critical chunk); 另外一種安到輔助塊(ancillary chunks), PNG 允許軟體毋好忽略佢毋識个附加塊。這種因為資料塊个設計,允准 PNG 格式在擴大个時節還係做得保持摎舊版本相容。

數據塊結構

PNG 檔案當中,每一個數據所都係四個部分組成,像下 :

關鍵資料塊裡肚有四個標準資料塊:

  • 檔案頭資料塊 IHDR(header chunk): 包含有圖像基本資訊,做為第一個資料塊出現還過單淨出現一擺。
  • 調色盤資料塊 PLTE(palette chunk): 愛放在圖像資料塊進前。
  • 圖像資料塊 IDAT(image data chunk): 儲存實際个圖像資料。PNG 資料允准包含幾下隻連續个圖像資料塊。
  • 圖像結束資料IEND(image trailer chunk): 放在檔案尾部,表示 PNG 資料流結束。

其他輔助數據塊列表 :

壓縮个方式

PNG 圖片个壓縮主要分有兩個階段:* 預解析(Prediction)

  • 縮減(Compression)

因爭用壓縮个方式主要由以上兩個階段構成,優化方向乜對應等兩隻階段。針對著預解析階段做優化主要个選擇係去優化差分編碼器,分編碼出現个結果做得出現盡多个零值抑係共樣个值。針對著壓縮階段个優化係尋出更好个 Deflate 演算法,來得著還較高个壓縮率。

預解析

在這階段當中,圖片會做先做兜仔預處理,續下來壓縮。逐擺會處理圖片當中某一間(column)个數據,首先經過濾波器 ( Filter ) 來處理這兜數據,逐個像齋點(Pixel)在無共樣个路項(Channel ex : RGB)个數值都會經過濾波器運算,然就得出个結果會交由差分處理器來重新計算通道中个數值。差分處理器會將目前這個像素點上通道中个數值摎之前或者之上(EX:左片頂高)像齋點做對比,根據差異進行差分編碼。若係相鄰个像素點在通道頂高个數值十分接近,就會出蓋多一息 , 零 , 重點這種盡細个值。歸隻 prediction 階段要做个事就係尋著適合个差分編碼器,使致得最終差分編碼个結果盡可能个都係重複盡細抑係零个值,這一階段个結果會影響著 Compression 階段當中做得實現个壓縮率。

縮減

過了解析階段過後,同編碼出个結果輸出去Deflate(係一種無損數據算法,同時使用吔 LZ 七十七和 Huffman Coding 方法), 由佢个執行真正个壓縮操作,在這階段會通過 LZ 七十七和 Huffman Coding 方法來對圖像進行編碼,最尾乜將處理後个圖片結果儲存。最終个壓縮率主要受著兩方面个影響 :

  • 預解析階段(Prediction)个處理結果:對於 RGB 通道數斯異像素區域,也就係編碼結果有當多零值个區域,在壓縮階段得當个壓縮率會特別高,若係相鄰區域个色差異大,係壓縮效果就會大打折扣。
  • Deflate 每一行个匹配情形:在整個壓縮處理个過程中都係用行个(column)為單位來進行處理。另外在處裡肚數據个過程當中,處裡背个符號數被限制在三-兩百五十八之間,換一個話來講,最高个壓縮率做得達著一千空三十二 : 一,係講出現个符號數量超過三點,就可能會出現無法度傍个情況。所以圖片个寬度也會係一個可能影響最終壓縮效果个因素之一。

壓縮方案

PNG 提供兩種壓縮个方案

  • 無失真壓縮(Lossless Compression): 數據經過壓縮過後,資訊毋會受著損失,做得完全還原至壓縮前个樣仔,一般這種壓縮个方案个壓縮率有一定个限制。
  • 有損失壓縮(Lossy compression): 數據來看啊過壓縮過後,資訊數據會同原始數據無共樣,毋過差一息仔,通常這種壓縮个方案做得提供當高个壓縮率。

無失真壓縮方案

目前大部分 PNG 个壓縮採用基於 LZ 七十七衍生演算法,分佢壓縮比率還較高,生成个檔案體積更加个小,並且不損失數據。

有損壓縮方案

因為 PNG 原本个無失真壓縮方案在壓縮率頂高有一定个限制,有兜開源者無法度接受既有个壓縮率,因此基於 PNG 原旦个壓縮方式開發新个有損壓縮个方案,在工程項摎得著了一定个應用。比將講 TinyPNG , 根據官方公開个資訊,佢利用了 Quantization 个技術來實現提高壓縮率,通過合併相像个色將二十四位元个 PNG 圖片說明會還較細八個元圖片。其中更有名个 PNG 有損壓縮演算法pngquant,在 Github頂項有完整个開原始碼,共樣乜係使用了 Vector Quantization 來減少圖片當中色个種類,在向量化過程當中像素點根據色目當像个程度進行分組,隨後組內个像素統計出一個中心色還過摎所有組內像素都替代為這中心色目。一直都會失忒喔,仰般在壓縮率摎圖片品質之間取得一個堵好到好處个平衡點係一個值得優化个方向。

摎其他格式相比

摎 GIF 相比

  • 一般情況下將靜態 GIF 圖像無失真轉換為 PNG 後做得壓縮率會略略提高(前提係共樣採用八個元索引模式)。
  • PNG 做得提供還較大色深度个支援,包含著有二十四位元(八位元三通道)過四十八個銀(十六位元三通道)真彩色。加入 Alpha 通道過後做得進一步支援每像素六十四位元表示。
  • 超過八個元色深 PNG 圖像轉換做GIF 時,圖像品質會因爭分色(色數減少)降低。
  • GIF 原生支援動態圖像,PNG 斯做得通過非標準來實現,在 PNG 个基礎上另外有發展出支援動畫个 APNG 摎 MNG 格式, 毋過目前普及度無高。

PNG 在 IE 六等舊代瀏覽器頂个支援較差。

摎 JPEG 相比

JPEG 做得對相片(抑係像)圖像生成更加細个檔案,這係因為 JPEG 採取用吔一種針對相片圖像个特定有損編碼方法,這種編碼適用在低對比,圖像色忒過渡平滑,雜訊多,也會有無規則个情況下。假使講在這種情形下用 PNG 代替 JPEG,檔案尺寸增大當多,另外圖像品質个提高有限。相應个,係講儲存文字,線條抑係講相像个邊緣清楚,有大垤共樣色區域个圖像,PNG 格式个壓縮效果就愛比 JPEG 好加當多,還過毋會出現 JPEG 恁樣个高對比度區域个圖像失真个。係講圖像既有呢清楚个邊脣,又有相片圖像个特點,就需要在這兩種格式之間權衡一下吔。JPEG 毋支援透明度。

因為 JPEG 係失真壓縮,會產生迭代失真,在重複壓縮摎解碼个過程當中會緊失去資訊使到圖像品質下降。因為 PNG 斯無失真呢,儲存將愛編輯个圖像來講更加个合適。雖然 PNG 縮著相片圖像也有效,毋過有專門針對相片圖像設計个無失真壓縮格式,比將講無失真 JPEG 兩千和 DNG。總概來講這兜格式都做毋得做著適用所有个圖像。對於將愛發布个圖像做得儲存成 JPEG,用 JPEG 編碼一擺毋會造成明顯个圖像失真。

摎 JPEG-LS相比

JPEG-LS 係一個「做得講」無失真壓縮格式,相對於頂高講著个有損 JPEG 縮減,佢个知名度無高。佢做得直接摎 PNG 相比較,用一組標準个測試圖像。在 Waterloo Repertoire ColorSet(一組標準測試圖像)下,JPEG-LS 一般表現愛比 PNG 好百分之十百分之十五,毋過其中有兜仔圖像 PNG 表現明顯較好兜仔,大約百分之五十百分之七十五。故所,係講這兩種格式都支援還有對圖檔大小當敏感,做得用這兩種格式都試看啊,摎圖像資料本身有較大關係。

摎 TIFF 相比

TIFF 係一個當多方案結合个格式。佢廣泛用作專業圖像編輯軟體之間圖像交換个中間格式,故所佢緊去支援還較多應用程式需要个功能,對應用程式無關心个圖像操作部分支援無多。這乜表示當多應用程式單淨使得辨識 TIFF 个一個子集,還合產生還過多个潛在混亂个所在。

TIFF 使用个最通用个無失真壓縮演算法係 LZW。這種演算法 --GIF 當中也在使用,一直到二零零三年一直在專利保護之中。有一種 TIFF 變種使用摎 PNG 共樣个壓縮演算法,但係無得著當多專利程式所支援。TIFF 也提供吔一種特殊个無失真壓縮演算法,當像 CCITT Group IV,做得對二值圖像(比論傳真抑係烏白文字)比 PNG 有還較好个效果。

PNG 單淨支援毋係自左乘 α,還過 TIFF 也支援聯合(自左乘)α。

PNG 規範當中毋包含嵌入式 EXIF(做得交換圖檔格式)圖像資料个標準,比論數位翕相機翕著个圖像。還過 TIFF,JPEG 兩千 , DNG 都支援 EXIF。

早期个瀏覽器毋支援 PNG 圖像;JPEG 摎 GIF 係主流圖像个格式。因為GIF 个色深度限制,網頁肚个有色過渡个圖像都係使用 JPEG。不管仰仔,JPEG 縮都會造成圖像个輕可模糊。還過 PNG 做得做到在相應色目深度下个儘可能精確,同時保持圖檔毋大。PNG 已經漸漸變成一種對細个梯度圖像个較好个選擇,已經對大體个看法已經著吔 PNG 有咧當好个支援。

參考文獻

外部連結

  • PNG 檔案格式
  • PNG規範第二版(英文), 二零零三年十一月十號 W 三 C 建議
  • PNG 官方站(英文)
  • PNG 个故事(英文)