設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

解密三星蘋(píng)果和小米10 用的HEIF照片格式,諾基亞華為貢獻(xiàn)大

科技深水區(qū) 2020/2/25 18:15:11 責(zé)編:汐元

前段時(shí)間發(fā)布的小米10系列手機(jī)采用了一種新的圖片格式:HEIF,能夠在保持畫(huà)質(zhì)不變的前提下縮減至少50%的文件體積。

▲圖自:HEIF官網(wǎng)

HEIF格式照片的文件擴(kuò)展名一般是.HEIC(也有其他的格式)。看到這個(gè)格式名,用iPhone的小伙伴一定很熟悉。

沒(méi)錯(cuò),蘋(píng)果在2017年iOS 11系統(tǒng)上就已經(jīng)開(kāi)始支持這種圖片格式,大家可以去翻翻IT之家的老文章(點(diǎn)此前往)。

據(jù)汐元所知,蘋(píng)果應(yīng)該是最早在手機(jī)上廣泛應(yīng)用HEIF圖片格式的了,不過(guò)當(dāng)時(shí)很多小伙伴對(duì)這個(gè)圖片格式不太了解,加上當(dāng)年兼容性不好,給大家導(dǎo)圖片帶來(lái)諸多不便,所以,很多小伙伴對(duì)蘋(píng)果當(dāng)時(shí)的決定表示不屑,甚至不滿。

感受一下當(dāng)年很多網(wǎng)友的評(píng)論:

包括汐元也是,因?yàn)樽鲈u(píng)測(cè)經(jīng)常需要把圖片導(dǎo)到自己的Windows電腦上,結(jié)果在電腦上打不開(kāi)這個(gè)格式,還要轉(zhuǎn)格式,任務(wù)著急的時(shí)候真心想給蘋(píng)果寄刀片。

不過(guò),時(shí)間證明,蘋(píng)果的決定是對(duì)的,我錯(cuò)了。

后來(lái),Windows 10系統(tǒng)和安卓9系統(tǒng)在2018年也開(kāi)始支持HEIF圖片格式。同年,三星Note9其實(shí)也已經(jīng)支持.HEIC照片。

小米10發(fā)布前,雷軍甚至表示,等HEIF普及后,估計(jì)JPEG和GIF就可以淘汰了。

汐元覺(jué)得,未來(lái)如果HEIF普及了,也許真的可以取代JPEG和GIF。

寫(xiě)這句話的時(shí)候,汐元覺(jué)得臉上火辣辣得疼。

說(shuō)到這里,相信大家都很好奇,HEIF究竟是怎么夠做到保證畫(huà)質(zhì)不變而縮小文件體積的?

汐元翻了一下網(wǎng)上的資料,大多沒(méi)有明確針對(duì)這個(gè)問(wèn)題進(jìn)行說(shuō)明。所以這篇文章打算聚焦這個(gè)問(wèn)題來(lái)為大家介紹。

為什么HEIF相比JPEG能夠在畫(huà)質(zhì)不變的情況下將文件體積大幅縮???

我們首先要明白JPEG的圖片格式具體是怎么樣的。

所謂JPEG格式的圖片,其實(shí)說(shuō)的是一種圖像壓縮的技術(shù)標(biāo)準(zhǔn),使用這種標(biāo)準(zhǔn)壓縮出來(lái)的圖片,就叫“JPEG文件”。

JPEG文件后綴名包括JPG、JPEG、JPE、JFIF以及JIF。都是我們熟悉的。

那么JPEG標(biāo)準(zhǔn)是怎么壓縮圖片的呢?

我們知道,一張圖片放大后,就可以看到一個(gè)一個(gè)的像素點(diǎn)。

每個(gè)像素點(diǎn),都包含了描述這個(gè)像素點(diǎn)顏色的一組數(shù)值,這個(gè)叫色彩空間,例如我們熟悉的RGB色彩空間,還有CMYK色彩空間等。

一般照片用的是RGB色彩空間,而JPEG標(biāo)準(zhǔn)采用的是一種叫做YCbCr的色彩空間。所以壓縮之前,要先進(jìn)行色彩空間轉(zhuǎn)換。

▲圖自:wikimedia

YCbCr色彩空間中,Y表示的是亮度,Cb代表藍(lán)色的彩度,Cr表示的是紅色的彩度。

換句話說(shuō),Y代表亮度,CbCr代表色彩。

轉(zhuǎn)換之后,每個(gè)像素背后變成了另一組數(shù)值。

因?yàn)槿搜蹖?duì)亮度敏感,對(duì)色彩不那么敏感,所以實(shí)際壓縮的時(shí)候,JPEG標(biāo)準(zhǔn)不會(huì)對(duì)亮度信息做太多改變,主要對(duì)色彩信息做壓縮。

壓縮有兩種,一種是有損壓縮,一種是無(wú)損壓縮。JPEG在壓縮時(shí),兩種都會(huì)用,一般先進(jìn)行有損壓縮,然后進(jìn)行無(wú)損壓縮。

有損壓縮第一步是對(duì)Cb通道和Cr通道的色彩數(shù)據(jù)按照一定的比例進(jìn)行取樣。這個(gè)過(guò)程就損失了一部分?jǐn)?shù)據(jù)。

第二步,就是將一張圖片中的像素分成無(wú)數(shù)個(gè)8×8像素的方塊,每個(gè)方塊里有64個(gè)像素,對(duì)應(yīng)64組數(shù)據(jù)。

然后,將這64組數(shù)據(jù)進(jìn)行一種叫離散余弦變換(DCT)的數(shù)學(xué)處理,處理后,這64組數(shù)據(jù)就變成了數(shù)據(jù)更簡(jiǎn)潔一些的系數(shù)矩陣。

至于這個(gè)離散余弦變換怎么搞,就不用了解了,懂高數(shù)的IT之家小伙伴可以自行去學(xué)習(xí)。

總之,在經(jīng)過(guò)DCT變換后,64組像素?cái)?shù)值變成了64個(gè)系數(shù),這個(gè)過(guò)程又產(chǎn)生了數(shù)據(jù)損失。

接下來(lái),對(duì)于這一組8×8的序數(shù)矩陣,還不能直接處理,要繼續(xù)進(jìn)行一步叫“量化”的處理過(guò)程。

量化是怎么進(jìn)行的大家不用知道,只需要知道,量化的目的是適當(dāng)減小矩陣內(nèi)各個(gè)像素點(diǎn)之間的差別。因?yàn)槿搜蹖?duì)小范圍內(nèi)差別高的像素區(qū)域辨別能力不高,所以不如削減它們的差異。

經(jīng)過(guò)量化處理后,8×8的序數(shù)矩陣變成了一組更加簡(jiǎn)潔的數(shù)字矩陣,有大面積的0。

很顯然,這一步,又損失了一部分?jǐn)?shù)據(jù)。

好,走到這一步,接下來(lái)就是無(wú)損壓縮了。

首先,我們把上一步量化后的8×8數(shù)字矩陣提取出來(lái)。提取的順序是這樣“Z”字型的。

提取出來(lái)后,得到64個(gè)數(shù)據(jù)。這64個(gè)數(shù)據(jù)中,第一個(gè)數(shù)字叫DC系數(shù)編碼,后面63個(gè)數(shù)字叫AC系數(shù)編碼。

我們要知道,一張圖片里可以包含很多很多個(gè)8×8的小方塊,都進(jìn)行上述處理后,就有很多很多個(gè)DC系數(shù)。

我們把這很多很多個(gè)DC系數(shù)抽出來(lái),組成一個(gè)集體,然后對(duì)它們進(jìn)行差分編碼和哈夫曼編碼。

至于其他的AC系數(shù),我們對(duì)他們進(jìn)行行程編碼。

這樣,JPEG標(biāo)準(zhǔn)的壓縮步驟基本就走完了。

這些步驟走完后,壓縮成的.JPG文件體積就會(huì)比原圖小很多,當(dāng)然圖片質(zhì)量也會(huì)有所損失。

但我們要說(shuō)的還沒(méi)完。

上面三種無(wú)損壓縮編碼的操作過(guò)程大家不需要知道,但是他們的壓縮思想,大家是有必要知道的。

差分編碼,就是對(duì)于一串?dāng)?shù)字,除了第一個(gè)數(shù)字,其他數(shù)字都表示為它和前一個(gè)數(shù)字的差。例如100、101、103、104、107這串?dāng)?shù)據(jù),可以表示為100、1、2、1、3。這就起到了壓縮作用。

哈夫曼編碼,它的大體思想在一串?dāng)?shù)據(jù)里,用短字符表示出現(xiàn)頻率多的數(shù)字,用稍長(zhǎng)的字符表示出現(xiàn)頻率少的數(shù)字。

假如有下面這句話:“IT之家網(wǎng)友在IT之家討論IT之家小編”,這句話里“IT之家”幾個(gè)字反復(fù)出現(xiàn),那我們就用“1”來(lái)表示“IT之家”,然后這句話就成了“1網(wǎng)友在1討論1小編”,這樣是不是就被壓縮了?

注意,上面這個(gè)例子并不嚴(yán)謹(jǐn),只是為了方便大家理解哈夫曼編碼的思想,實(shí)際操作很復(fù)雜的,要考慮概率、做二叉樹(shù)等步驟的。如果有IT之家小伙伴感興趣可自行學(xué)習(xí)。

行程編碼,這就很簡(jiǎn)單了,直接用例子說(shuō)明。假如有一串字符“aaabbbccccdddddd”,它包括3個(gè)a,3個(gè)b,4個(gè)c,6個(gè)d,所以就把它編碼為“3a3b4c6d”。

很明顯,要想讓這些無(wú)損編碼最大限度發(fā)揮壓縮作用,需要保證數(shù)據(jù)有一定特性,例如大面積相同的字符、有很多出現(xiàn)頻率較高的字符或者有很多相似的字符等。

講到這,相信大家也就理解了為什么前面要大費(fèi)周章做那么多有損的處理了,一部分原因就是為了得到適合進(jìn)行無(wú)損壓縮的數(shù)據(jù)。

通常情況下,一張圖片里面,其實(shí)是有很多相同或相近的像素點(diǎn)的,這意味著它們背后的數(shù)據(jù)有很大可以壓縮的空間。

JPEG目的就是要干這個(gè)事兒的,這么說(shuō)相信大家能理解。

說(shuō)了那么多JPEG,那HEIF呢?

別急,當(dāng)我們掌握了JPEG圖像壓縮的方法,對(duì)于HEIF是怎樣進(jìn)一步壓縮圖片體積的,就好理解多了。

其實(shí)HEIF做的工作和JPEG差不多,大體路徑是相似的,但在一些一些細(xì)節(jié)上有改進(jìn)。

我們需要先做一個(gè)簡(jiǎn)單的說(shuō)明。其實(shí)所謂的HEIF,是圖片的封裝格式,它主要采用的是一種叫HEVC的編碼方式。

打個(gè)比方,一張圖片的信息,它們其實(shí)是經(jīng)過(guò)HEVC的編碼方式進(jìn)行編碼,然后將編碼后的信息用一個(gè)盒子(容器)裝起來(lái),這個(gè)盒子就叫HEIF。

HEIF是把盒子和編碼方式分開(kāi)了,而JPEG沒(méi)有。

HEIF的這種操作方式和很多視頻格式很像,我們經(jīng)常看到的MP4、MKV、AVI等視頻格式,其實(shí)都是盒子的名字,盒子里面是編碼的方式,例如MPEG-4、H.264、H.265等。

影音軟件播放視頻文件的時(shí)候,都是先把盒子打開(kāi),然后再解碼里面的編碼文件。

上面提到的H.265還有一個(gè)名字,就叫HEVC,沒(méi)錯(cuò),也就是HEIF格式主要采用的編碼方式,所以說(shuō)這個(gè)圖片格式其實(shí)采用的也是視頻的編碼的方式。

除了HEVC,HEIF格式也可能采用其他的編碼方式,但很少見(jiàn)。它的編碼方式和對(duì)應(yīng)的后綴名如下:

我們看到,小米10和iPhone用的都是HEVC的編碼方式,后綴名都是.HEIC。

所以問(wèn)題就變成了,HEVC的編碼方式是怎么將體積縮小的呢?

其實(shí)主要有兩點(diǎn)。

首先,根據(jù)上文的介紹,JPEG是將圖片劃分成很多8×8的像素塊來(lái)進(jìn)行壓縮編碼的。

而在HEVC編碼方式中,這個(gè)像素塊的劃分方式更靈活,最大可以允許以64×64來(lái)劃分,然后在64×64的像素塊中,可以靈活的劃分子像素塊,可以劃分成32×32、16×16、8×8的子塊,這叫做四叉樹(shù)單元?jiǎng)澐帧?/span>

這么做有什么好處呢?答案就是,在面對(duì)一張圖片的時(shí)候,如果是信息量比較平緩的區(qū)域,我們可以用比較大的像素塊來(lái)劃分,如果是信息量比較密集的區(qū)域,就可以用比較小的像素塊來(lái)劃分。

這種根據(jù)實(shí)際情況來(lái)劃分的編碼單元,可以很大程度提高編碼效率。特別是針對(duì)4K等高分辨率、像素量大的照片,優(yōu)勢(shì)更明顯。

HEIF照片的文件體積能夠縮小,大部分要?dú)w結(jié)于此。

其次是第二點(diǎn)。前面介紹JPEG時(shí)我們講了它使用的幾種無(wú)損編碼方式,分別是差分編碼、哈夫曼編碼和行程編碼。

這其中從編碼之后的數(shù)據(jù)量來(lái)說(shuō),其實(shí)最主要的是哈夫曼編碼,它是可以改進(jìn)的。

在HEIF標(biāo)準(zhǔn)中,這種無(wú)損編碼方式主要采用了自適應(yīng)的二進(jìn)制算術(shù)編碼(下面簡(jiǎn)稱“算術(shù)編碼”)。

其實(shí),隨著JPEG跟隨時(shí)代的發(fā)展,算術(shù)編碼也被引入到了JPEG的編碼方式中,但是主要還是哈夫曼編碼。

算術(shù)編碼相比哈夫曼編碼,可以進(jìn)一步提高編碼效率。

其實(shí)算術(shù)編碼的思想原理和哈夫曼編碼是差不多的,都是考慮數(shù)據(jù)中不同字符出現(xiàn)的概率,然后給不同字符以不同的編碼。

算術(shù)編碼具體的數(shù)學(xué)化思想很濃,難以三言兩語(yǔ)講清楚,這里也不方便展開(kāi)說(shuō)了??傊?,算術(shù)編碼最后得到的是一個(gè)很簡(jiǎn)潔,但是很長(zhǎng)的小數(shù)。

正是因?yàn)閿?shù)學(xué)的思想很深刻,算術(shù)編碼的編碼效率要比哈夫曼編碼更高,最后呈現(xiàn)在大家面前的,就是對(duì)于同一張照片可以壓縮成更小的體積。

以上,基本上就是HEIF能夠在保證畫(huà)質(zhì)不變的前提下縮小圖片體積的原因了。

最后,關(guān)于HEIF,還有一些比較基礎(chǔ)的知識(shí),大家可以比較輕松地了解到。IT之家之前也轉(zhuǎn)了小米官方對(duì)HEIF格式介紹的文章

HEIF的全名是高效率圖像格式(High Efficiency Image Format),是運(yùn)動(dòng)圖像專家組(MPEG)在2013年推出的。它和前面的JPEG不是一個(gè)組織。

值得一提的是,HEIF的相關(guān)技術(shù)是諾基亞的技術(shù)人員制定的,在2015年基本定型,現(xiàn)在也是諾基亞在維護(hù)(HEIF官網(wǎng):點(diǎn)此前往)。

有意思的是,HEIF的關(guān)鍵編碼技術(shù)HEVC,華為正是主要推動(dòng)者之一,手握大量專利,還在今年1月加入了HEVC Advance專利池。HEVC Advance專利池中的關(guān)鍵成員還有三星、聯(lián)發(fā)科、皇家飛利浦等等。

當(dāng)然啦,小米10憑借自身的話題性,對(duì)HEIF圖片格式的進(jìn)一步普及確實(shí)也起到了推動(dòng)作用。

無(wú)論如何,汐元還是期待HEIF圖片格式能夠克服困難,盡快普及,畢竟現(xiàn)在智能手機(jī)攝像頭像素已經(jīng)能達(dá)到億級(jí)了,JPG格式下手機(jī)的存儲(chǔ)空間確實(shí)吃緊。

畢竟,總不能只因?yàn)橐嬲掌头堑觅I更大存儲(chǔ)空間的手機(jī)吧。

參考

華為終端2020新品發(fā)布會(huì)專題

廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:HEIF,小米10諾基亞華為

軟媒旗下網(wǎng)站: IT之家 最會(huì)買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機(jī)APP應(yīng)用 魔方 最會(huì)買 要知