來聊聊WebP的原理

前言

前端常用的圖片格式:JPG商源、PNG寂诱、GIF癣缅、WEBP栈戳、APNG等等岂傲。

主要圖片格式背景以及信息

JPEG(Joint Photographic Experts Group)聯(lián)合圖像專家組

成立于1986年,該標(biāo)準(zhǔn)于1992年正式通過子檀,在JPEG中主要包含4中模式:

  • 無損壓縮編碼模式

  • 基于DCT的順序編碼模式

  • 基于DCT的累進(jìn)編碼模式

  • 基于DCT的分層編碼模式镊掖。

針對(duì)JPEG的大火,應(yīng)用領(lǐng)域越來越廣褂痰,為了增加壓縮比亩进,有出現(xiàn)了JPEG2000標(biāo)準(zhǔn),此標(biāo)準(zhǔn)完全拋棄了DCT(離散余弦變換)缩歪,而采用了離散小波變換归薛。

離散余弦變換:是以區(qū)塊編碼為主的方式,將圖片壓縮成8x8的小塊存儲(chǔ)到文件中匪蝙,所以圖片在加載時(shí)主籍,會(huì)一行一行的刷新。

離散小波變換:是以多解析編碼方式逛球,主要將影響頻率成分抽取出來千元,將圖片作為整體變換和編碼,所以圖片在加載時(shí)需忿,會(huì)直接展示模糊的圖片輪廓诅炉,然后逐漸變清晰。

GIF(Graphics Interchange Format)圖形交換格式

1987年由Compu Serve公司發(fā)展起來屋厘,為了填補(bǔ)跨平臺(tái)圖像格式涕烧。GIF是一種位圖,即每個(gè)像素填充一種顏色汗洒,最多支持256種顏色议纯。GIF采用的是LZW(Lempel-Zev-Welch)壓縮算法,比較適合色彩較少的場(chǎng)景溢谤,對(duì)于一些復(fù)雜顏色的場(chǎng)景GIF的表現(xiàn)力就比較有限瞻凤。GIF通常會(huì)自帶一個(gè)調(diào)色板憨攒,存放需要使用的顏色,所以壓縮時(shí)阀参,我們要減少圖像使用的顏色肝集。

GIF包含2個(gè)版本:GIF87a和GIF89a

  • GIF87a: 1987年推出,允許存儲(chǔ)一個(gè)圖像蛛壳,嚴(yán)格不支持透明像素杏瞻,,采用LZW壓縮算法衙荐,保證圖像質(zhì)量的前提下捞挥,能壓縮20%-25%
  • GIF89a:1989年推出,允許一個(gè)文件存儲(chǔ)多個(gè)圖像忧吟,可實(shí)現(xiàn)動(dòng)畫功能砌函,允許某些像素透明(我們常見的gif圖)

PNG(Portable Network Graphics)

1995年,因GIF的LZW數(shù)據(jù)壓縮算法的軟件專利開始收費(fèi)溜族,為避免影響讹俊,誕生了PNG,1999年unisys公司進(jìn)一步中止了GIF的專利免費(fèi)許可斩祭,讓PNG才開始獲得更多關(guān)注劣像,所以業(yè)內(nèi)瀏覽器很晚才開始支持PNG,IE在7.0才正式支持PNG格式的摧玫。(開發(fā)過IE6的同學(xué)一定很痛苦)

  • 無損壓縮:采用了LZ77算法的派生算法進(jìn)行壓縮,他利用特殊編碼方式標(biāo)記重復(fù)出現(xiàn)的數(shù)據(jù)绑青,因此對(duì)圖像顏色沒有影響诬像。

  • 索引彩色模式: PNG-8格式與GIF圖像類似,同樣采用8位調(diào)色板將RGB彩色圖像轉(zhuǎn)換為索引彩色圖像闸婴,圖像中保存的不再是各個(gè)像素的彩色信息坏挠,而是從圖像中挑選出來的具有代表性的顏色標(biāo)號(hào), 沒一個(gè)標(biāo)號(hào)對(duì)應(yīng)一種顏色邪乍,圖像數(shù)據(jù)量也因此減少降狠。

  • 更優(yōu)化的網(wǎng)絡(luò)傳輸:PNG圖像采用流式瀏覽,所以在圖片下載前庇楞,可以提供給瀏覽者一個(gè)基本圖像內(nèi)容榜配,然后慢慢清晰起來。

  • 支持透明效果:PNG可以為原圖像定義256個(gè)透明層次吕晌,使得彩色圖像邊緣能與任何背景平滑融合蛋褥,從而消除鋸齒邊緣。

WebP (WebM文件里單個(gè)被壓縮的幀)

WebP的文件格式來源于Google的VP8視頻編解碼(WebM)睛驳,VP8編解碼最大特性是幀內(nèi)預(yù)測(cè)壓縮烙心,也就是視頻的每一幀都被壓縮膜廊,后續(xù)幀與幀之間也會(huì)被壓縮。

WebP的名稱由來:WebM文件里單個(gè)被壓縮的幀淫茵。

自從2011年發(fā)布以來爪瓜,webP作為一個(gè)獨(dú)特文件類型做了很多升級(jí)與改變铆铆,例如支持透明度算灸、無損模式、動(dòng)畫支持等驻啤。

2013年支持了動(dòng)態(tài)WebP菲驴。

接下來我們來深入了解一下為什么有損WebP(lossy WebP)的壓縮能力如此之強(qiáng)吧。

WebP的壓縮的原理

第一步:宏塊

與JPG相同的時(shí)骑冗,WebP也采用宏塊進(jìn)行壓縮赊瞬,典型的宏塊由一個(gè) 16×16 的亮度像素(luma pixel)塊和兩個(gè) 8×8 的色度像素(chroma pixel)塊組成。分塊越小贼涩,預(yù)測(cè)越準(zhǔn)巧涧,需要記錄的信息也越多谤绳,一版來說,細(xì)節(jié)月豐富的地方袒哥,分塊越細(xì)缩筛。相對(duì)不豐富的地方使用16x16分塊。

image.png

第二步:預(yù)測(cè)

WebP最大的不同之處在于每個(gè)4x4的宏塊中都有一個(gè)預(yù)測(cè)模型堡称。(又名:過濾)桐臊,PNG過濾用的比較多,它對(duì)每一行做同樣的事晓殊,WebP過濾是針對(duì)每一個(gè)塊断凶。

VP8幀內(nèi)預(yù)測(cè)常用的三種宏塊:

  • 4x4 亮度像素塊

  • 16x16 亮度像素塊

  • 8x8 色度像素塊

編碼器會(huì)將它們放在一個(gè)4x4的測(cè)試像素塊填滿,并確定哪一個(gè)生成了最接近原始?jí)K的值挺物。這些用不同方法填滿的塊叫做”預(yù)測(cè)塊”懒浮。

主要使用的預(yù)測(cè)方式有以下4種:

  • H_PRED(Horiz prediction-水平預(yù)測(cè))——像素塊中每一列使用左邊一列(col L)的數(shù)據(jù)填充

  • V_PRED (vertical prediction-垂直預(yù)測(cè))——像素塊中每一行使用其上邊一行(row A)的數(shù)據(jù)填充

  • DC_PRED (DC prediction - DC 預(yù)測(cè))——像素塊中每個(gè)單元使用 row A 和 col L 的所有像素的平均值填充。

  • True Motion (TrueMotion 預(yù)測(cè))——一種超級(jí)先進(jìn)的模式,我沒找到原理砚著,暫時(shí)還不懂次伶。

image.png

對(duì)于4x4的亮度塊,會(huì)有6種額外預(yù)測(cè)模式稽穆,類似于垂直預(yù)測(cè)與水平預(yù)測(cè)方式冠王,他們可以從不同的方向去填充剩余色塊。

第三步:DCT(離散余弦變換)

將預(yù)測(cè)部分的原圖數(shù)據(jù)減去預(yù)測(cè)出來的數(shù)據(jù)舌镶,得到差值矩陣柱彻,最后對(duì)差值進(jìn)行DCT。此步驟會(huì)生成一個(gè)頻率系數(shù)矩陣餐胀,坐上的系數(shù)幅度最大哟楷,右下的最小,幅度值越小否灾,頻率越高卖擅。大部分圖片信息都在左上區(qū)域,這一步的作用就是朱熬出圖片的高頻區(qū)域和低頻區(qū)域墨技。

第四步:量化

人眼對(duì)高頻部分不敏感惩阶,這一步會(huì)將高頻部分舍去。對(duì)上一步的頻率系數(shù)表和量化表進(jìn)行計(jì)算扣汪,將頻率系數(shù)表和量化表按位相除断楷,并四舍五入整數(shù)位,最終生成一個(gè)量化矩陣崭别。

第五步:算法編碼

WebP不同于JPEG冬筒,也可以說由于JPEG壓縮的地方在于,WebP采用了算法編碼壓縮(Arithmetic encoding)茅主,JPEG采用的是霍夫曼編碼(Huffman encoding)账千,算法編碼提供了優(yōu)于霍夫曼編碼5%-10%的壓縮率。

總結(jié)

WebP的壓縮優(yōu)于其他圖片暗膜,主要得益于起繼承自VP8的幀內(nèi)預(yù)測(cè)技術(shù),相比于JPEG對(duì)圖像原值進(jìn)行編碼來說鞭衩,WebP編碼的是預(yù)測(cè)值和原值的差值学搜,這也是WebP體積更小的主要原因,最后论衍,WebP使用了更優(yōu)秀的算法編碼瑞佩。

這個(gè)WebP的壓縮過程用,一張圖可以囊括表述:

image.png

當(dāng)然以上主要是針對(duì)WebP的有損壓縮(lossy WebP)來進(jìn)行的原理講解坯台,無損壓縮的邏輯與其完全不同炬丸,不過我們提高性能,主要也是采用的有損WebP。

希望以上內(nèi)容稠炬,對(duì)大家了解WebP的原理有一定的幫助焕阿,能讓大家更好的去使用WebP。

相關(guān)資料

https://developers.google.com/speed/webp/docs/compression

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末首启,一起剝皮案震驚了整個(gè)濱河市暮屡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毅桃,老刑警劉巖褒纲,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異钥飞,居然都是意外死亡莺掠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門读宙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彻秆,“玉大人,你說我怎么就攤上這事论悴∫疵蓿” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵膀估,是天一觀的道長(zhǎng)幔亥。 經(jīng)常有香客問我,道長(zhǎng)察纯,這世上最難降的妖魔是什么帕棉? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮饼记,結(jié)果婚禮上香伴,老公的妹妹穿的比我還像新娘。我一直安慰自己具则,他們只是感情好即纲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著博肋,像睡著了一般低斋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上匪凡,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天膊畴,我揣著相機(jī)與錄音,去河邊找鬼病游。 笑死唇跨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播买猖,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼改橘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了政勃?” 一聲冷哼從身側(cè)響起唧龄,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奸远,沒想到半個(gè)月后既棺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡懒叛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年丸冕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薛窥。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胖烛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诅迷,到底是詐尸還是另有隱情佩番,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布罢杉,位于F島的核電站趟畏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏滩租。R本人自食惡果不足惜赋秀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望律想。 院中可真熱鬧猎莲,春花似錦、人聲如沸技即。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽而叼。三九已至郭脂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澈歉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工屿衅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留埃难,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像涡尘,于是被迫代替她去往敵國(guó)和親忍弛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容