Android P新的图片格式 HEIF 调研

HEIF

HEIF是什么?
HEIF format & features?
HEIF优缺点,商业价值?
Nokia HEIF?
Android P对HEIF的支持状况?
IOS对HEIF的支持状况?
兼容性问题?android

HEIF是什么?

HEIF是一个新的图片格式
不一样于jpeg的是,heif是容器和编码分开的,编码能够是hevc,h264,vpx等(解码同样),因为容器和编码分开的设计,heif里能够放不少信息,包括多张图片,音频,文本等微信

它定义了封装格式,编码格式,以及图像的展现方式,甚至涉及到与用户如何交互
因此一套完整的 HEIF解决方案,必定是平台相关的,不仅包含了拆包封包,还包括了编解码,展现,这些都须要与平台的接口整合框架

HEIF format & features?

Format:
compatible with the ISO Base Media File Format (ISOBMFF, ISO/IEC 14496-12)
clipboard.pngide

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.测试

HEIF优缺点,商业价值?

优势:
压缩比高,在相同的图片质量状况下,平比 JPEG 高两倍
能增长如图片深度信息,透明通道等辅助图片。(苹果正是经过这个就能实现动态的调整图片的景深)
支持存放多张图片,相似相册和集合。(实现多重曝光的效果)
支持多张图片实现 GIF 和 livePhoto 的动画效果
无相似 JPEG 的最大像素限制
支持缩略图
支持透明像素
分块加载机制动画

缺点:
应用不普遍,兼容性很差,平台应用都要支持适配,产业链条长google

主要图片格式对比
clipboard.png编码

Nokia HEIF?

Nokia的实现只有read/writer,至关于协议的拆包封包,其余都没有
它不是一个完整的解决方案
在Android上实现这个解决方案须要较大投入,两种实现方式都要较大投入:
1.嵌入android框架
2.独立SDK
clipboard.pngspa

Demo?

便于理解HEIF和Nokia API
实现了一个Demo,有些类型的显示方式须要投入较大精力好比grid,overlay实现不彻底可是能够展现图片,static,sequences都是正常展现的
clipboard.png设计

Demo最终实现设想?SDK方式

clipboard.png

Android P对HEIF的支持状况?

Android P只支持静态的显示HEIF,不管什么类型的HEIF
对HEIF的解析是OK的,不论什么类型均可以解析出
只能封装静态的HEIF
因为HEIF的编解码器以hevc,avc,aac为主因此decode和encode通常都是支持的
支持HEIF扫描
clipboard.png

有几个关心的问题:
HEIF的显示,ImageDecoder/BitmapFactory + ImageView
HEIF转Jpeg,BItmapFactory
YUV,Surface,Jpeg转HEIF,androidx.heifwriter.HeifWriter
在这里HEIF的主要价值是高压缩率,其余带来的价值没有获得体现,或者只是google试水

IOS对HEIF的支持状况?

支持静态heif的展现,不支持sequence,其余格式都是静态展现
从测试状况看不支持解析sequence类型
因此也不支持sequence类型的扫描
屏幕快照 2018-08-14 下午2.25.08
clipboard.png

兼容性问题?

因为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的手机太少
clipboard.png

专利 专利 专利

以前介绍了heif format是跟mpeg4-12兼容的,那mpeg4parser是能够解析heif的大部分状况的

经过mpeg4 extractor或者mp4parser是否是能够避免专利方面的问题呢,暂时不清楚,可能会部分避开,可是heif定义的展现方式可能避不开,也许是google只实现了静态展现和封装的缘由,纯属猜想。
clipboard.png

Android P

上一节提到heif format是跟mpeg4-12兼容的Android经过mediaextractor/mpeg4extractor/mediamux/mediacodec来解析解码和编码封装heifAndroid8.0实际上就已经有代码加入了