內容字號:默認大號超大號

段落設置:取消段首縮進段首縮進

字體設置:切換到微軟雅黑切換到宋體

中国在nba篮球球
精準搜索請嘗試:精確搜索

涓浗cba绡悆璧?:解密三星蘋果和小米10 用的HEIF照片格式,諾基亞華為貢獻大

2020/2/25 18:15:11來源:IT之家作者:汐元責編:汐元評論:

中国在nba篮球球 www.onrvh.com 前段時間發布的小米10系列手機采用了一種新的圖片格式:HEIF,能夠在保持畫質不變的前提下縮減至少50%的文件體積。

▲圖自:HEIF官網

HEIF格式照片的文件擴展名一般是.HEIC(也有其他的格式)??吹秸飧齦袷矯?,用iPhone的小伙伴一定很熟悉。

沒錯,蘋果在2017年iOS 11系統上就已經開始支持這種圖片格式,大家可以去翻翻IT之家的老文章(點此前往)。

據汐元所知,蘋果應該是最早在手機上廣泛應用HEIF圖片格式的了,不過當時很多小伙伴對這個圖片格式不太了解,加上當年兼容性不好,給大家導圖片帶來諸多不便,所以,很多小伙伴對蘋果當時的決定表示不屑,甚至不滿。

感受一下當年很多網友的評論:

包括汐元也是,因為做評測經常需要把圖片導到自己的Windows電腦上,結果在電腦上打不開這個格式,還要轉格式,任務著急的時候真心想給蘋果寄刀片。

不過,時間證明,蘋果的決定是對的,我錯了。

后來,Windows 10系統和安卓9系統在2018年也開始支持HEIF圖片格式。同年,三星Note9其實也已經支持.HEIC照片。

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

汐元覺得,未來如果HEIF普及了,也許真的可以取代JPEG和GIF。

寫這句話的時候,汐元覺得臉上火辣辣得疼。

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

汐元翻了一下網上的資料,大多沒有明確針對這個問題進行說明。所以這篇文章打算聚焦這個問題來為大家介紹。

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

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

所謂JPEG格式的圖片,其實說的是一種圖像壓縮的技術標準,使用這種標準壓縮出來的圖片,就叫“JPEG文件”。

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

那么JPEG標準是怎么壓縮圖片的呢?

我們知道,一張圖片放大后,就可以看到一個一個的像素點。

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

一般照片用的是RGB色彩空間,而JPEG標準采用的是一種叫做YCbCr的色彩空間。所以壓縮之前,要先進行色彩空間轉換。

▲圖自:wikimedia

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

換句話說,Y代表亮度,CbCr代表色彩。

轉換之后,每個像素背后變成了另一組數值。

因為人眼對亮度敏感,對色彩不那么敏感,所以實際壓縮的時候,JPEG標準不會對亮度信息做太多改變,主要對色彩信息做壓縮。

壓縮有兩種,一種是有損壓縮,一種是無損壓縮。JPEG在壓縮時,兩種都會用,一般先進行有損壓縮,然后進行無損壓縮。

有損壓縮第一步是對Cb通道和Cr通道的色彩數據按照一定的比例進行取樣。這個過程就損失了一部分數據。

第二步,就是將一張圖片中的像素分成無數個8×8像素的方塊,每個方塊里有64個像素,對應64組數據。

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

至于這個離散余弦變換怎么搞,就不用了解了,懂高數的IT之家小伙伴可以自行去學習。

總之,在經過DCT變換后,64組像素數值變成了64個系數,這個過程又產生了數據損失。

接下來,對于這一組8×8的序數矩陣,還不能直接處理,要繼續進行一步叫“量化”的處理過程。

量化是怎么進行的大家不用知道,只需要知道,量化的目的是適當減小矩陣內各個像素點之間的差別。因為人眼對小范圍內差別高的像素區域辨別能力不高,所以不如削減它們的差異。

經過量化處理后,8×8的序數矩陣變成了一組更加簡潔的數字矩陣,有大面積的0。

很顯然,這一步,又損失了一部分數據。

好,走到這一步,接下來就是無損壓縮了。

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

提取出來后,得到64個數據。這64個數據中,第一個數字叫DC系數編碼,后面63個數字叫AC系數編碼。

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

我們把這很多很多個DC系數抽出來,組成一個集體,然后對它們進行差分編碼和哈夫曼編碼。

至于其他的AC系數,我們對他們進行行程編碼。

這樣,JPEG標準的壓縮步驟基本就走完了。

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

但我們要說的還沒完。

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

差分編碼,就是對于一串數字,除了第一個數字,其他數字都表示為它和前一個數字的差。例如100、101、103、104、107這串數據,可以表示為100、1、2、1、3。這就起到了壓縮作用。

哈夫曼編碼,它的大體思想在一串數據里,用短字符表示出現頻率多的數字,用稍長的字符表示出現頻率少的數字。

假如有下面這句話:“IT之家網友在IT之家討論IT之家小編”,這句話里“IT之家”幾個字反復出現,那我們就用“1”來表示“IT之家”,然后這句話就成了“1網友在1討論1小編”,這樣是不是就被壓縮了?

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

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

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

講到這,相信大家也就理解了為什么前面要大費周章做那么多有損的處理了,一部分原因就是為了得到適合進行無損壓縮的數據。

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

JPEG目的就是要干這個事兒的,這么說相信大家能理解。

說了那么多JPEG,那HEIF呢?

別急,當我們掌握了JPEG圖像壓縮的方法,對于HEIF是怎樣進一步壓縮圖片體積的,就好理解多了。

其實HEIF做的工作和JPEG差不多,大體路徑是相似的,但在一些一些細節上有改進。

我們需要先做一個簡單的說明。其實所謂的HEIF,是圖片的封裝格式,它主要采用的是一種叫HEVC的編碼方式。

打個比方,一張圖片的信息,它們其實是經過HEVC的編碼方式進行編碼,然后將編碼后的信息用一個盒子(容器)裝起來,這個盒子就叫HEIF。

HEIF是把盒子和編碼方式分開了,而JPEG沒有。

HEIF的這種操作方式和很多視頻格式很像,我們經??吹降腗P4、MKV、AVI等視頻格式,其實都是盒子的名字,盒子里面是編碼的方式,例如MPEG-4、H.264、H.265等。

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

上面提到的H.265還有一個名字,就叫HEVC,沒錯,也就是HEIF格式主要采用的編碼方式,所以說這個圖片格式其實采用的也是視頻的編碼的方式。

除了HEVC,HEIF格式也可能采用其他的編碼方式,但很少見。它的編碼方式和對應的后綴名如下:

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

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

其實主要有兩點。

首先,根據上文的介紹,JPEG是將圖片劃分成很多8×8的像素塊來進行壓縮編碼的。

而在HEVC編碼方式中,這個像素塊的劃分方式更靈活,最大可以允許以64×64來劃分,然后在64×64的像素塊中,可以靈活的劃分子像素塊,可以劃分成32×32、16×16、8×8的子塊,這叫做四叉樹單元劃分。

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

這種根據實際情況來劃分的編碼單元,可以很大程度提高編碼效率。特別是針對4K等高分辨率、像素量大的照片,優勢更明顯。

HEIF照片的文件體積能夠縮小,大部分要歸結于此。

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

這其中從編碼之后的數據量來說,其實最主要的是哈夫曼編碼,它是可以改進的。

在HEIF標準中,這種無損編碼方式主要采用了自適應的二進制算術編碼(下面簡稱“算術編碼”)。

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

算術編碼相比哈夫曼編碼,可以進一步提高編碼效率。

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

算術編碼具體的數學化思想很濃,難以三言兩語講清楚,這里也不方便展開說了。總之,算術編碼最后得到的是一個很簡潔,但是很長的小數。

正是因為數學的思想很深刻,算術編碼的編碼效率要比哈夫曼編碼更高,最后呈現在大家面前的,就是對于同一張照片可以壓縮成更小的體積。

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

最后,關于HEIF,還有一些比較基礎的知識,大家可以比較輕松地了解到。IT之家之前也轉了小米官方對HEIF格式介紹的文章。

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

值得一提的是,HEIF的相關技術是諾基亞的技術人員制定的,在2015年基本定型,現在也是諾基亞在維護(HEIF官網:點此前往)。

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

當然啦,小米10憑借自身的話題性,對HEIF圖片格式的進一步普及確實也起到了推動作用。

無論如何,汐元還是期待HEIF圖片格式能夠克服困難,盡快普及,畢竟現在智能手機攝像頭像素已經能達到億級了,JPG格式下手機的存儲空間確實吃緊。

畢竟,總不能只因為要存照片就非得買更大存儲空間的手機吧。

參考

相關文章

關鍵詞:HEIF,小米10,諾基亞,華為

IT之家,軟媒旗下科技門戶網站 - 愛科技,愛這里。

Copyright (C)中国在nba篮球球 , All Rights Reserved.

軟媒公司版權所有