2017-02-03 132 views
1

WebP技術既用於有損圖像壓縮技術,也用於無損圖像壓縮,其壓縮圖像比「JPEG」更多,我正在研究圖像壓縮技術。所以如果任何人能夠爲我提供清晰的WebP圖像壓縮算法,那對我來說就是幫助。使用WebP技術的圖像壓縮

+0

https://medium.com/@duhroach/how-webp-works-lossly-mode-33bd2b1d0670#.26c74n6re – saurabheights

+0

我也建議你從官方存儲庫下載的所有JPEG,PNG,WEBP代碼。 Mozjpeg也是這樣,你做這件事越早,它就會越有利。 – saurabheights

+0

謝謝你的建議@saurabheights –

回答

2

好吧,提供整個有損和無損壓縮算法,包括全部細節的所有變種,在這個論壇上超出了單個答案。 Google提供免費的lossylossless比特流規範。但後者相當不完整,不準確,部分甚至是錯誤的。根據這個規範你將很難實現一個編解碼器,而且研究一些源代碼也是不可或缺的。

在這裏我可以給你至少有一些關於無損格式的細節:

  • 像PNG,它使用ZIP deflate壓縮算法,WebP的使用霍夫曼編碼的所有圖像信息,太。實際上,WebP的許多壓縮增益源於巧妙地採用霍夫曼編碼。許多細節顯然是從DEFLATE借用的,即將代碼大小限制爲15位,並且用又一個霍夫曼代碼編碼哈夫曼字母,這與DEFLATE使用的幾乎相同。
  • 通過LZ77滑動窗口壓縮和一個大小爲2..2048的可選顏色緩存(包括最近使用的顏色)實現了額外的壓縮。編碼器可以自由決定使用哪一個。兩者都可以混合使用。不過,我在測試中發現,這可能會對壓縮比造成不利影響。攝影圖像通常使用大顏色緩存進行壓縮,使用緩存時,通常最好對緩存中不存在的像素始終使用文字ARGB編碼,而不是使用LZ77反向引用。
  • 儘管使用LZ77壓縮與DEFLATE幾乎相同,但Google的規範不是基於字節,而是基於像素。也就是說,ARGB四倍頻是壓縮的,而不是單獨的A-R-G-B字節。此外,WebP允許反向參考長度高達4096像素,參考距離高達1048576 - 120像素,這遠遠超出了DEFLATE限制。另一個好處是通過對ARGB頻道使用單獨的霍夫曼字母來獲得。
  • 與PNG類似,WebP LZ77壓縮具有RLE(遊程長度編碼)功能,該功能是在參考長度超過參考距離時巧妙處理特殊情況的結果。在這種情況下,可用字節會一遍又一遍地被複制,直到達到指定的長度。我發現使用此功能可以爲具有相同顏色的長時間運行的「人造」圖像產生很好的壓縮效果。然而,它與顏色緩存相沖突,這會爲這些運行生成相當高效的霍夫曼代碼。基於我的初步測試,顏色緩存勝過RLE功能。
  • 與PNG類似,WebP在原始ARGB數據上表現不佳。因此,在壓縮開始之前,這兩種格式都允許在像素數據上應用各種變換。這些變換真的很好地減少了像素流的方差,並且解決了大量的壓縮比。 WebP定義了13個標準預測變換,而PNG只有4個。然而,我發現大多數預測變量的增益並不高,而且我通常使用「選擇」濾波器,它選擇左邊的像素或以上,哪一個看起來更適合作爲預測。和PNG一樣,簡單的過濾器通常比複雜的過濾器好。
  • 除了預測變換,WebP提供了一些其他變換,其中我只嘗試過「減去綠色」,它試圖通過從R和B中爲每個像素減去G來去相關RGB通道。事實上,我觀察到一些好處,當應用於預測後。如果之前應用,可能會對照片圖像產生負面影響。
  • WebP對比特流使用5個獨立的霍夫曼代碼:一個用於綠色通道,LZ77長度代碼和顏色緩存索引,一個用於紅色通道,一個用於藍色通道,一個用於alpha通道,另一個用於alpha通道對於LZ77距離代碼。這是一個聰明的設計,因爲ARGB頻道中的信息可能是完全不相關的,所以將它們合併爲單個字母表可能不太理想。

WebP無損提供了一個廣泛的選項,可以結合和調整到最大。但在我看來,大部分組合都不值得進行測試。根據我的觀察,壓縮通常具有以下默認值:

  • 使用「選擇」預測器。
  • 應用「減去綠色」轉換。
  • 使用具有2048個插槽的顏色緩存。
  • 如果當前像素不在緩存中,請將其編碼爲文字。