谷歌公布,Android P 版本支持HEIF格式圖片。HEIF 全稱為 High Efficiency Image Format,即高效率圖片格式。相比於 JPEG 等目前互聯網通用的圖片格式,HEIF 圖片有何價值?在HEIF圖片的適配過程中,應用會遭遇哪些典型性問題?該如何進行適配?
一. 什么是HEIF圖片
1.HEIF(High Efficiency Image Format),即高效率圖片格式。2015年由 ISO 批准發布,由 MPEG 標准組織制定,采用 HEVC 編碼格式。
2.蘋果自2017.9.20發布的 iOS11 開始拍照保存支持HEIF格式(iPhone 7及以上機型)。
3.谷歌 O 版本 MR1 支持 HEIF 靜態圖的軟件解碼,Android P 支持 HEIF 軟件解碼、軟件編碼。
二. HEIF圖片價值:
1.與 JPEG 同等圖片質量的壓縮率是 JPEG 的2.39倍,可節省約50%空間,節省網絡傳輸流量。
2.支持存儲多張圖片(圖片集合、序列圖等,如連拍)。
3.支持動態圖片(類似 Gif 動圖)。
4.支持圖片深度信息、透明度信息。
目標:替代 JPEG,成為主流圖片類型
三. 適配HEIF圖片格式典型問題
1.在支持 HEIF 編解碼的手機無法打開HEIF格式文件。
2.盡管手機支持 HEIF 編解碼,應用仍無法掃描到用戶手機本地的HEIF格式圖片,無法分享或者發送本地 HEIF 格式圖片給其他用戶。
3.將 HEIF 格式圖片,通過支持 HEIF 編解碼的手機發送到不支持 HEIF 編解碼的手機,會出現圖片無法查看的問題。
四. 適配指導
1.判斷手機是否支持 HEIF 格式
谷歌未提供統一接口,推薦應用通過手機系統版本來判斷是否支持 HEIF 格式編解碼。目前,Android O 版本 MR1 支持 HEIF 靜態圖的軟件解碼,Android P 支持 HEIF 軟件解碼、軟件編碼。
以華為 Android P 版本手機 HEIF 格式編解碼為例,參考實現代碼請關注“安卓綠色聯盟”公眾號閱讀歷史文章查看。
2.如何讀取和顯示HEIF圖片文件
①通過 Android P 版本新增的類 ImageDecoder 加載圖片。
參考實現代碼請關注“安卓綠色聯盟”公眾號閱讀歷史文章查看。
顯示效果:
②通過歷史版本已有類 BitmapFactory 加載圖片。
該方法工作量最小,只需放開 Android P 版本手機 HEIF 圖片文件加載,無需修改圖片加載代碼。需要注意的是,應用需默認支持 HEIF 圖片的加載查看。
參考實現代碼請關注“安卓綠色聯盟”公眾號閱讀歷史文章查看。
顯示效果:
3.圖片掃描推薦方式
方式一(推薦):通過 ContentProvider 掃描
實現本地圖片的上傳、分享或者是發送功能,需要掃描手機本地的圖片。如果應用通過自身掃描的方式,需根據手機版本判斷手機支持的圖片編解碼格式,所以推薦使用 ContentProvider 掃描手機中的圖片。通過這種方法掃描,系統會將支持的所有解碼格式的圖片文件返回給應用,不需要應用自身再去做格式判斷。
參考實現代碼請關注“安卓綠色聯盟”公眾號閱讀歷史文章查看。
通過抓取日志,能夠看到應用如果在支持 HEIF 編解碼的手機執行,系統會將HEIF格式圖片掃描結果返回給應用,如果在不支持 HEIF 格式的手機執行,系統則不會將 HEIF 格式圖片掃描結果返回。
支持 HEIF 格式的手機執行抓取的日志請關注“安卓綠色聯盟”公眾號閱讀歷史文章查看。
方式二(不推薦):應用自身進行掃描
應用通過自身掃描,判斷哪些是可支持的圖片文件,需要增加對 HEIF 格式的判斷, HEIF 格式文件的后綴有兩種:.heif和.heic
4.HEIF 格式轉 JPEG
使用場景:
HEIF 格式轉成 JPEG 格式主要考慮向下兼容的問題。通過支持 HEIF 格式的手機向不支持此格式的手機發送 HEIF 圖片,如果直接發送原始 HEIF 格式,會出現圖片無法使用的情況。因此,為了避免這種情況,可以考慮在發送之前將 HEIF 格式圖片轉換成 JPEG 格式再發送。應用可以選擇使用谷歌原生的接口來進行轉換。
參考實現代碼請關注“安卓綠色聯盟”公眾號閱讀歷史文章查看。
HEIF 圖片格式的諸多優勢使它具有很好的市場前景,這次谷歌 Android P 版本對此格式的支持也充分說明了這一點,建議各位廣大開發者趕緊適配。