HEIF格式解析

松脂2023-02-02  18

HEIF格式的全名为 High Efficiency Image File Format(高效率图档格式),是由动态图像专家组(MPEG)在2013年推出的新格式(参见 https://nokiatech.github.io/heif/ )。

苹果在iOS11系统中引入HEIF格式用于替代原来的JPG格式的图片。使用HEVC的编码技术存储图像数据,进一步减少存储容量和提升图像质量。 据 WWDC17 数据,使用HEIF会达到JPEG压缩比的2倍。

使用iOS11系统的iPhone手机,在相机的设置中格式选择高效,拍摄下来的照片会保存为HEIF格式。

由于目前其他系统(Windows/Android)还不支持该格式图片的显示,所以在将iPhone中的照片导入到Windows PC时,iOS系统会将其转码为JPG格式图片。目前只有macOS High Sierra版本的mac系统支持HEIF格式图片,在将iPhone中的图片导入到该系统的mac上时可以保持原有的格式(一般后缀名为.heic,表示图像的编码格式为HEVC格式)。

iOS设备通过AirDrop发给其他iOS设备时,如果接收方为iOS 10及以下OS版本时,发送方也会将heif图片转码成JPG格式发送。

HEIF格式是基于 ISO Base Media File Format格式衍生出来的图像封装格式,所以它的文件格式同样符合ISO Base Media File Format (ISO/IEC 14496-12)中的定义( ISOBMFF)。

文件中所有的数据都存储在称为Box的数据块结构中,每个文件由若干个Box组成,每个Box有自己的类型和长度。在一个Box中还可以包含子Box,最终由一系列的Box组成完整的文件内容,结构如下图所示,图中每个方块即代表一个Box。

我们常见的MP4文件同样是ISOBMFF结构,所以HEIF文件结构和MP4文件结构基本一致,只是用到的Box类型有区别。

HEIF文件如果是单幅的静态图片的话,使用item的形式保存数据,所有item单独解码;如果保存的为图片序列的话,使用track的方式保存。此处我们只分析item形式的保存。

ISO/IEC 14496-12中这样描述Box的结构

如下图,是使用iOS11系统的iphone7手机拍摄的图片的文件结构

它的最外一层由ftyp、meta和mdat三个Box组成,然后meta Box由包含有多个子Box,符合图1的描述。

FileTypeBox在文件中有且仅有一个,它的类型字段值为ftyp,位于文件起始位置,其中的brand定义了文件中所存放的媒体类型,它的定义如下

如果文件为HEIF格式,它的major_brand字段会是以下表格中所示:

红圈标识的即为major_brand字段的内容,此处为heic,表示该文件中存储的为HEVC(Main or Main Still Picture profile)格式编码的图片。

media data box的类型为mdat,它用来存储实际图片数据。数据的具体位置由meta box中定义。

meta box为一个container box,它里面包含有多个子box,各个子box一起定义了图像数据的位置格式等信息。

通过iloc box获取到具体某个item的数据的保存位置,即可从文件中提取出该数据,这些数据实际内容即为HEVC格式编码的数据,再利用ipco box中的hvcC数据,获取相应的SPS、PPS和VPS信息,即可使用HEVC解码器将数据解码为一幅图像。

实际使用iphone7拍摄出来的照片,文件中共有51个item,对应的id为1-51,其中1-48的item信息基本一致,类型为hvc1,提取出item数据后可以使用HEVC解码器解码出图像,但是观察发现图像均为完整照片的一部分。

pitm box中指明主item为49,所以显示的时候需要依据id为49的item的格式显示,该item类型为grid,该类型表明整个图像被分割成多个小图像分别进行编码保存。解析该item数据可以得到完整图像被分割为6x8的小图像,且通过iref box中可知,49号item想关联的item为1-48号item,所以要显示完整图像时需要将1-48号item分别解码,将获取的图像按照6x8的分割合并起来,形成一幅完整的图像即为最终图像。

从iref 和ipco box中可知,50号item数据为图像的缩略图,它有区别与1-48的编码参数和格式,与49号item相关联,说明为49号item(即完整图像)的缩略图。

51号item类型为Exif,保存了相机相关信息。

基于 QT 的开源查看工具: https://github.com/ksvc/MediaParser ,欢迎star!

相关链接

也欢迎大家使用我们的直播、短视频SDK。金山云SDK仓库地址:

https://github.com/ksvc

金山云SDK相关的QQ交流群:

HEIF(High Efficiency Image File Format) 是一种高效率图像文件格式,可以让用户拍摄的照片以更小尺寸存储,节约手机空间,随着行业HEIF格式图片的普及,系统相册需对HEIF进行系统级支持。

1、支持拍摄HEIF图片(默认为JPEG格式,可选择为HEIF格式)

2、支持HEIF图片查看、编辑、分享、云同步等全链路的适配

3、支持用户自定义“分享时是否转格式为JPEG”

备注:目前Ace2、FindX2系列支持。后续将适配更多机型,可以通过下述操作方法查看手机是否支持该功能。

操作方法:

ColorOS 11及以上版本:

1、相机 >点击右上角设置图标 >高级设置 >拍摄格式。

2、进入相册 >点击右上角“:”标 识>设置>发送HEIF图片时转格式

可以。新格式存在兼容问题,HEIF格式生成的文件扩展名为.heif或.heic,默认不可以用lr打开,但是可以通过更改图片格式在lr中打开。

1、手机设置,可到设置-相机-格式中进行修改,在相机拍摄中选择“兼容性最好”,或“传输到MAC或lr”里选择自动。

2、使用格式转换软件或网页,支持将HEIF转换为lr。

3、针对分享、共享应用时,HEIC文件图片改为默认为lr格式。


转载请注明原文地址:https://juke.outofmemory.cn/read/2874495.html

最新回复(0)