動態

詳情 返回 返回

HEIF:更高質量、更小體積,開啓 HarmonyOS 圖像新體驗 - 動態 詳情

一、圖像發展大趨勢及 HarmonyOS 圖像格式支持策略

自數字圖像誕生以來,圖像格式經歷了多輪更新迭代。從早期的BMP、TIFF等無壓縮或輕壓縮格式,到後來廣泛應用的JPEG、PNG、GIF等主流格式,圖像編碼技術不斷演進,其核心目標始終是——在有限的存儲空間與帶寬條件下,實現更高質量、更高效率的圖像呈現。

在 PC 時代,JPEG 和 PNG 分別作為有損壓縮與無損壓縮的代表,幾乎覆蓋了絕大多數圖像使用場景。但隨着數字圖像設備的普及和互聯網的飛速發展,傳統圖像格式的侷限性日益凸顯,催生出新一代圖像格式的需求。

現代圖像數據呈現出兩大顯著趨勢:

  • 圖像質量持續提高
    • 分辨率穩步提升。
    • 色深逐漸增加。
    • 色域持續拓展。
    • 動態範圍逐步升級。

  • 圖像數量爆炸性增長
    • 社交媒體、即時通訊、在線購物等應用推動個人日均拍攝圖像數大幅提升。
    • 圖像成為 AI、視覺識別等領域的重要數據源。

在當今時代,人人皆為“影像內容生產者”,海量的照片與視頻對圖像的存儲、傳輸和展示提出了更高的要求。HarmonyOS從系統層面持續強化圖像處理能力,優先支持主流圖像格式,並對實際應用中具備顯著優勢的格式着重進行優化。

目前,HarmonyOS已支持GIF、JPEG、PNG、WebP、HEIF、BMP等主流圖像格式的解碼與顯示,支持將圖像編碼為JPEG、PNG、HEIF、WebP、GIF等格式。對TIFF格式和RAW格式預覽圖的解碼支持即將上線。更多格式的支持也正在規劃推進中。

二、HEIF的優勢及 HarmonyOS 對 HEIF 的優化

HEIF(High Efficiency Image File Format)作為新一代高效圖像格式,憑藉優異的壓縮性能和豐富的編碼特性,為數字影像帶來了全新的體驗。此外,自發布以來的近十年實踐中,HEIF已充分證明其穩定性與成熟度,逐步取代傳統格式成為未來圖像技術的重要選擇。

HEIF基於HEVC(H.265)視頻壓縮標準,具備顯著的技術優勢:

  • 更高壓縮效率:在相同畫質下,相比於JPEG、WEBP等傳統格式,可節省50%以上的存儲空間。
  • 支持HDR和高色深:天然支持10bit色深、HDR顯示,更適配現代高性能顯示設備
  • 可擴展性強:支持存儲增益圖Gain Map、深度圖Depth Map等輔助圖像,適用於HDR、景深重建等高級圖像處理場景。

自HarmonyOS 5.0起,對HEIF圖像的支持已實現全面升級。系統底層架構進行了優化,結合軟硬協同的解碼方案,大幅提升瞭解碼效率與運行性能。HarmonyOS 5.x相比於HarmonyOS 4.x,HEIF解碼性能提升60%以上,為用户帶來更快速、更流暢、更高質量的圖像體驗。同時,系統也支持HEIF硬件編碼,能夠快速得到HEIF圖片。

三、圖像處理開發示例

HarmonyOS的Image組件和Image Kit提供了通用的圖像處理API,無需針對HEIF作特殊處理,編程方式與使用JPEG、PNG等圖源一致。下面針對開發者基於系統能力進行圖像處理開發時,可能採取的兩種方式進行介紹。

方式1:直接使用ArkUI提供的Image組件進行顯示

方式簡介:

Image組件提供了通用的圖像顯示能力,解碼、渲染等流程均由系統完成,支持顯示BMP、SVG、GIF、PNG、JPEG、HEIF等多種圖像格式,開發者只需要將圖像資源傳遞給Image組件即可實現顯示效果。

適用場景:

如果開發者僅期望展示圖像,不需要額外加工處理,推薦使用這種方式實現。

核心代碼:

// 創建Image組件,直接傳入圖片文件路徑,用於顯示
build() {
  Column() {
    Image('images/view.heic');
  }
}

方式2:使用Image Kit解碼得到圖像像素數據,進一步處理後,再使用Image組件渲染顯示。

方式簡介:

Image Kit提供了高效的圖像解碼能力,同樣支持顯示PNG、JPEG、BMP、SVG、GIF、HEIF等多種圖像格式,還支持指定圖像尺寸、解碼區域、動態範圍等參數選項,能夠滿足更多場景下的定製化需求。

適用場景:

如果開發者不希望直接展示原圖,而是需要對圖像進行一定的後處理,推薦使用這種方式實現。

核心代碼:

// 解碼得到圖像像素數據
imageSource = image.createImageSource('images/view.heic');
let decodingOptions : image.DecodingOptions = {
  editable: true,
  desiredPixelFormat: image.PixelMapFormat.RGBA_8888,
};
pixelMap = imageSource.createPixelMapSync(decodingOptions);
// 對圖像進行後處理:調用PixelMap的方法,或自行實現對圖像像素數據的處理
// 這裏以將圖像順時針旋轉90度為例
pixelMap. rotate(90);
// 創建Image組件,傳入處理後的PixelMap,用於顯示
build() {
  Column() {
    Image(pixelMap);
  }
}

四、HEIF圖像轉碼方法

考慮到在部分場景下,應用可能仍然希望使用JPEG圖像,這裏也給出將HEIF圖像轉碼成JPEG圖像的方法。

基於HarmonyOS Image Kit的圖像解碼和圖像編碼能力,只需幾行代碼即可將HEIF圖像轉碼成JPEG圖像。

核心代碼:

// 創建ImageSource
let imageSource = image.createImageSource('images/view.heic');
// 創建ImagePacker
const imagePacker = image.createImagePacker();
// HEIF到JPEG的轉碼,指定編碼選項,將圖片編碼為JPEG
// quality推薦設置為95,保證較好的圖片質量的同時,使編碼後的圖片文件體積更小
// 如果希望保留圖片的EXIF信息,必須將needsPackProperties參數指定為true
let packOptions: image.PackingOption = {
  format: “image/jpeg” ,
  quality: 95,
  needsPackProperties: true,
};
await imagePacker.packToFile(imageSource, file.fd, packOptions);
// 使用完成後,釋放編碼器和圖像源
imagePacker.release();
imageSource.release();

瞭解更多鴻蒙HEIF圖像開發指導,請訪問HarmonyOS官網:

  1. 如何處理HEIF圖片:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/heif-adapter-faq
  2. Image Kit開發指南:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/image-kit
  3. Image Kit API參考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/image-api

Add a new 評論

Some HTML is okay.