高效率图像文件格式

**高效率圖檔格式**（英語：**H**igh **E**fficiency **I**mage **F**ile Format， **HEIF**，也稱**高效圖檔格式**），是一個用於單張圖像或圖像序列的檔案格式。它由動態影像專家小組（MPEG）開發，並在 MPEG-H Part 12（ISO/IEC 23008-12）中定義。

HEIF 規範也定義了高效率影片編碼（HEVC）編碼的內嵌圖像和 HEVC 編碼的圖像序列的儲存方式，其中以受約束的方式應用影格間預測。

HEIF 檔案與 ISO 基本媒體檔案格式（ISOBMFF，ISO/IEC 14496-12）相容，並且還可以包括其他媒體流，例如定時的文字和音訊。

## 歷史

HEIF 的要求和主要用途於 2013 年定義。該規範的技術開發用時約一年半，並於 2015 年夏季完成。

## 用例

HEIF 支援的用法包括：

* 儲存單個或多個圖像及其縮圖
* 儲存連拍相片
* 支援同時擷取影片和靜止圖像，即將靜止圖像和定時圖像序列儲存在同一檔案中
* 高效地表示動畫和動態靜圖
* 儲存焦點堆疊和曝光堆疊到同一個容器檔案
* 儲存從其他圖檔衍生的圖像，無論是以非破壞性圖像編輯操作為目的衍生的圖像，還是作為預先計算衍生的圖像
* 支援儲存其他媒體，例如音訊和定時的文字，將定時的圖像序列儲存在同一個容器檔案中，並且同步播放。

由於 HEVC 支援各種色度格式和樣品保真度至無失真編碼，該格式可以滿足當今消費類裝置所有的圖像儲存需求，從典型的 8 位元圖像到高端、專業裝置所要求的高保真度和動態範圍的 16 位元圖像。HEIF 促進的一些使用場景如下：

### 數位相機和智慧型手機

為了節約儲存空間，HEIF 封裝的 HEVC 編碼的圖像可以用於壓縮全解析度圖像，同時保留一個較低解析度的 JPEG 副本（例如 4K 解析度或更低）用於螢幕顯示。

數位相機和智慧型手機可以使用 HEIF 來實現單檔案儲存連拍、焦點堆疊或曝光堆疊的相片。與此類似，拍攝的影片與靜態圖像也可以儲存在同一個 HEIF 檔案中。HEIF 還可以將任何圖像集合儲存在單個檔案中，從而可以輕鬆分享。

### 網頁和接入網際網路的圖像應用程式

HTML5.2 的圖片元素 （頁面存檔備份，存於網際網路檔案館）提供了為同一圖像指示多個替代方案的能力，網頁瀏覽器可以選擇最適合其目的的一份。網頁和連接的應用程式使用 HEIF 的一個動機是減少網頁和圖像內容的下載時間。

### 圖像編輯

改變方向和裁剪是 HEIF 的基本功能，並且不需要重新編碼圖像。此外，HEIF 引入了非破壞編輯操作的框架，具體可由外部規範指定。圖像編輯應用程式可以使用此功能將編輯指令與原始圖像儲存在同一檔案中。

## 特性

在 ISOBMFF 中，連續或定時的媒體 / 元資料流形成一個軌道（track），而靜態媒體或元資料作為項（items）儲存。也是因此，HEIF 具有如下基本設計：

* 靜態圖像作為項儲存。所有圖像項都獨立編碼，解碼不依賴其他項。一個檔案中可以包含任意數量的圖像項。
* 圖像序列儲存為軌道。可以將圖像序列軌道指定為以定時或非定時的方式顯示，例如作為畫廊或圖片專輯。在圖像之間存在編碼上的依賴關係時，使用圖像軌跡軌道而非圖像項。
* 一個檔案可以包含圖像項、圖像序列軌道以及其他媒體。例如，可以建立 HEIF 檔案，其中包括符合 HEIF 的圖像專案或圖像序列軌道，以及符合 ISOBMFF 的任何衍生格式的音訊或定時文字軌道。

根據上述設計原則，HEIF 檔案可以儲存下列資料類型：

* **圖像項（Image Items）：**儲存單個圖像、圖像屬性或縮圖。
* **圖像衍生（Image Derivations）:** 衍生圖像是在執行時基於旋轉、網格和疊加等描述生成的。這些圖像取決於儲存在 HEIF 檔案中的其他圖像。衍生圖像的儲存空間很小。
* **圖像序列（Image Sequences）：**儲存多個時間相關或時間預測的圖像（如突髮式相片拍攝或電影圖形動畫）其屬性和縮圖。 可以使用不同的預測選項來利用圖像之間的時間和空間相似性。 因此，即使將數十張圖像儲存在同一個 HEIF 檔案中，檔案大小也可以大幅降低。
* **輔助圖像項（Auxiliary Image Items）:** 儲存補充另一圖像專案的圖像資料。 一個 alpha 平面或深度圖是這種圖像的例子。 這些資料並非如此顯示，而是以各種形式用於補充另一圖像專案。
* **圖像元資料（Image Metadata）：**儲存同一個 HEIF 檔案中儲存圖像的 EXIF、XMP 等元資料。

## 比較

### 特性比較

下表顯示了不同圖像格式的比較：

**備註**

上述比較使用了下列參考資料：

備註：可以肯定的是，該比較表中的摘要在涉及不同格式的特徵時有些可能不完整。例如，該表沒有涵蓋 JPEG 的某些擴充。

## 語法和結構

HEIF 符合 ISO 基本媒體檔案格式（ISO/IEC 14496-12）。圖像項儲存在根級元框中，圖像序列儲存為影片媒體軌。

一個檔案可以包含圖像專案、圖像序列軌道以及其他媒體。建立符合 HEIF 規範的檔案時可以包含圖像項、圖像序列軌道，以及任何符合 ISOBMFF 的衍生格式的音訊和定時的文字軌。

符合 ISOBMFF 的檔案由稱為框（box）的資料結構序列組成，每個資料結構都包含一個四字元代碼（4CC）指示框的類型、框的大小（以位元組為單位）和框的有效載荷。框可以巢狀，即框中可以包含其他框。 ISOBMFF 和 HEIF 對框的順序和階層有進行約束。

### 圖像項

HEIF 允許為不同圖像項之間儲存共享的圖像屬性。屬性有兩種：描述和變形。描述屬性提供有關圖像項的資訊，而不對圖像本身進行修改。變形屬性提供有關圖像項需要完成的變形修改的資訊。HEIF 標準規定了旋轉 90°、180° 和 270° 的變形屬性以及裁剪屬性。除了描述屬性之外，圖像項還可選用元資料項表述特徵，例如 Exif 或 XMP 元資料。

### 衍生圖像

衍生圖像的作用是可以進行無失真的圖像編輯，使原始編碼的圖像繼續儲存在檔案中，而新的圖像受稱為衍生圖像，可以為一個或多個輸入圖像應用變換操作來製成。HEIF 定義了將衍生圖像儲存為項的一般結構以及幾種衍生圖像的類型。衍生圖像項的專案類型表示變換操作，而項載荷包含操作的輸入參數。輸入圖像可以是編碼的圖像或者衍生圖像。下面列出了 HEIF 標準中定義的衍生圖像類型。其他類型可能在其他文件或 HEIF 標準的更新版本中定義。

### 圖像序列

圖像序列軌道繼承了 ISOBMFF 的視訊軌道的屬性和特徵。

## 支援的媒體編解碼器

HEIF 指定了一種結構格式，從中可以衍生特定編解碼器的圖像格式。HEIF 還包括封裝圖像的圖像和圖像序列以符合高效率影片編碼（HEVC，ISO/IEC 23008-2 | ITU-T Rec. H.265）的規範。該標準的未來版本可能包括其他影片和靜態圖像媒體編解碼器。

## HEVC 圖檔格式

HEIF 標準包括封裝 HEVC 編碼的圖像和圖像序列為 HEIF 相容檔案的規範。

### 支援

HEIF 得到了下列支援：

**作業系統**

* Microsoft Windows 10（version 1803 預覽版，build 17123），在此前需要通過安裝名為 CopyTrans HEIC for Windows 的解碼器來實現對 HEIF/HEIC 的支援，或者安裝其它支援 HEIF/HEIC 的圖像管理器。
* macOS High Sierra
* iOS 11
* Android Pie

**圖像編輯軟體**

* Adobe Lightroom（僅限 macOS High Sierra、iOS 11 + 及 Android 9+）
* Adobe Photoshop CC
* GIMP
* ImageMagick
* Zoner Photo Studio X

**其他**

* Nokia 為網頁瀏覽器提供一個開源 JavaScript HEIF 解碼器
* 開源軟體庫「libheif」支援讀取和儲存 HEIF 檔案

## 品牌及 MIME 類型

HEIF 標準中指定的品牌如下表所示。HEIF 標準規定了「mif1」和「msf1」結構品牌。另外，HEVC 的品牌如表 1 所列。專有品牌「heic」和「hevc」表示使用了 HEVC Main Profile。

網際網路媒體類型（也稱 MIME，多用途網際網路郵件擴充）獲各種應用程式用於標識資源或檔案的類型。MIME 類型包括媒體類型（HEIF 檔案為 'image'）和一個子類型，以及零個或多個可選參數。對於多用途檔案，可以給予檔案的主要用途選擇子類型。

可選的編解碼器 MIME 參數可以用來指示檔案中存在的軌道和項使用的編碼格式。編解碼器 MIME 參數還包括 HEVC 編碼圖像專案或圖像序列軌道的組態級別值。

截至 2016 年 1 月 (2016-01)，`image/heif`、`image/heif-sequence` 和 `image/heic` 尚未註冊為 MIME 類型。

## 相關標準

* MPEG-H
* HEVC（H.265）
* ISO 基本媒體檔案格式

## 參考資料

## 外部連結

* MPEG 圖檔格式標準的網站 （頁面存檔備份，存於網際網路檔案館）（英文）
* 該檔案格式的網站 （頁面存檔備份，存於網際網路檔案館）（英文）
* 在 GitHub 上的原始碼 （頁面存檔備份，存於網際網路檔案館）（英文）