HEIF是什麼?
HEIF format & features?
HEIF優缺點,商業價值?
Nokia HEIF?
Android P對HEIF的支持狀況?
IOS對HEIF的支持狀況?
兼容性問題?android
HEIF是一個新的圖片格式
不一樣於jpeg的是,heif是容器和編碼分開的,編碼能夠是hevc,h264,vpx等(解碼同樣),因爲容器和編碼分開的設計,heif裏能夠放不少信息,包括多張圖片,音頻,文本等微信
它定義了封裝格式,編碼格式,以及圖像的展現方式,甚至涉及到與用戶如何交互
因此一套完整的 HEIF解決方案,必定是平臺相關的,不僅包含了拆包封包,還包括了編解碼,展現,這些都須要與平臺的接口整合框架
Format:
compatible with the ISO Base Media File Format (ISOBMFF, ISO/IEC 14496-12)ide
Features:
Storage of burst photos.
Support for simultaneous capture of video and still images, i.e. storing still images and timed image sequences into the same file.
Efficient representation of animations and cinemagraphs.
Storage of focal and exposure stacks into the same container file.
Storage of images derived from other images of the file, either as derived images represented by non-destructive image editing operations or as pre-computed derived images.
Support for storing other media, such as audio and timed text, into the same container file with timed image sequences and synchronizing their playback.測試
優勢:
壓縮比高,在相同的圖片質量狀況下,平比 JPEG 高兩倍
能增長如圖片深度信息,透明通道等輔助圖片。(蘋果正是經過這個就能實現動態的調整圖片的景深)
支持存放多張圖片,相似相冊和集合。(實現多重曝光的效果)
支持多張圖片實現 GIF 和 livePhoto 的動畫效果
無相似 JPEG 的最大像素限制
支持縮略圖
支持透明像素
分塊加載機制動畫
缺點:
應用不普遍,兼容性很差,平臺應用都要支持適配,產業鏈條長google
主要圖片格式對比編碼
Nokia的實現只有read/writer,至關於協議的拆包封包,其餘都沒有
它不是一個完整的解決方案
在Android上實現這個解決方案須要較大投入,兩種實現方式都要較大投入:
1.嵌入android框架
2.獨立SDKspa
便於理解HEIF和Nokia API
實現了一個Demo,有些類型的顯示方式須要投入較大精力好比grid,overlay實現不徹底可是能夠展現圖片,static,sequences都是正常展現的設計
Android P只支持靜態的顯示HEIF,不管什麼類型的HEIF
對HEIF的解析是OK的,不論什麼類型均可以解析出
只能封裝靜態的HEIF
因爲HEIF的編解碼器以hevc,avc,aac爲主因此decode和encode通常都是支持的
支持HEIF掃描
有幾個關心的問題:
HEIF的顯示,ImageDecoder/BitmapFactory + ImageView
HEIF轉Jpeg,BItmapFactory
YUV,Surface,Jpeg轉HEIF,androidx.heifwriter.HeifWriter
在這裏HEIF的主要價值是高壓縮率,其餘帶來的價值沒有獲得體現,或者只是google試水
支持靜態heif的展現,不支持sequence,其餘格式都是靜態展現
從測試狀況看不支持解析sequence類型
因此也不支持sequence類型的掃描
屏幕快照 2018-08-14 下午2.25.08
因爲HEIF的使用還不像jpeg那麼普遍,因此在用戶使用環境中會有兼容的問題
好比個人手機支持HEIF,可是你的手機或電腦不支持,或者我想分享到朋友圈,微信不支持等等
蘋果最早實現了HEIF商業化,它的一些作法能夠借鑑:
1.分享的時候好比朋友圈,email等,把HEIF轉成Jpeg
2.設備之間共享或多屏互動的時候,會查詢對方是否支持HEIF,不支持的狀況下轉換成Jpeg
平臺支持,應用適配須要一個過程
HEIF轉Jpeg效率問題?
在Android P pixel XL上用bitmapfactory的方式試了下,resolution 1440x960 quality 100, 耗時在200ms左右,不一樣的機型CPU等效果是不同的這個後邊再次統計下,如今市面上Android P的手機太少
以前介紹了heif format是跟mpeg4-12兼容的,那mpeg4parser是能夠解析heif的大部分狀況的
經過mpeg4 extractor或者mp4parser是否是能夠避免專利方面的問題呢,暫時不清楚,可能會部分避開,可是heif定義的展現方式可能避不開,也許是google只實現了靜態展現和封裝的緣由,純屬猜想。
上一節提到heif format是跟mpeg4-12兼容的Android經過mediaextractor/mpeg4extractor/mediamux/mediacodec來解析解碼和編碼封裝heifAndroid8.0實際上就已經有代碼加入了