Android与HEIF格式图片适配方法
本文字数:1490字
预计阅读时间:8分钟
一. 什么是HEIF图片
HEIF (High Efficiency Image File Format)
是由动态图像专家组(MPEG)在2013年推出的新格式。苹果在iOS11系统中引入
HEIF
格式用于替代原来的JPG
格式的图片。使用HEVC
的编码技术存储图像数据,进一步减少存储容量和提升图像质量。Android P
开始原生支持HEIF
格式。HEIF
相较于JPEG
格式,拥有高压缩比、图片集合功能、支持动态图片和图片派生等优势。 另外,我们对市场上近2000款应用进行了测试,90%以上的应用已经能支持HEIF图片查看等功能。二. HEIF图片价值
- 与 JPEG 同等图片质量的压缩率是 JPEG 的2.39倍,可节省约50%空间,节省网络传输流量。
- 支持存储多张图片(图片集合、序列图等,如连拍)。
- 支持动态图片(类似 Gif 动图)。
- 支持图片深度信息、透明度信息。
三. 主要图片格式对比
优点:
- 压缩比高,在相同的图片质量情况下,平比 JPEG 高两倍。
- 能增加如图片深度信息,透明通道等辅助图片。(苹果正是通过这个就能实现动态的调整图片的景深)。
- 支持存放多张图片,类似相册和集合。(实现多重曝光的效果)。
- 支持多张图片实现 GIF 和 livePhoto 的动画效果。
- 无类似 JPEG 的最大像素限制。
- 支持缩略图。
- 支持透明像素。
- 分块加载机制。
缺点:
应用不广泛,兼容性不好,平台应用都要支持适配,产业链条长。
四. 技术实现方案
1. 谷歌未提供统一接口
推荐应用通过手机系统版本来判断是否支持 HEIF 格式编解码。目前,Android O 版本 MR支持 HEIF 静态图的软件解码,Android P 支持 HEIF 软件解码、软件编码。
以华为 Android P 版本手机 HEIF 格式编解码为例。
方法一:通过 Android P 版本新增的类 ImageDecoder 加载图片。
参考实现代码:
方法二:通过历史版本已有类 BitmapFactory 加载图片。
该方法工作量最小,只需放开 Android P 版本手机 HEIF 图片文件加载,无需修改图片加载代码。需要注意的是,应用需默认支持 HEIF 图片的加载查看。
参考实现代码:
方法三:HEIF 格式转 JPEG
使用场景:
HEIF
格式转成JPEG
格式主要考虑向下兼容的问题。通过支持HEIF
格式的手机向不支持此格式的手机发送HEIF
图片,如果直接发送原始HEIF
格式,会出现图片无法使用的情况。因此,为了避免这种情况,可以考虑在发送之前将
HEIF
格式图片转换成JPEG
格式再发送。应用可以选择使用谷歌原生的接口来进行转换。先判断图片是否为.HEIF 类型。
参考实现代码:
将HEIF 格式转 JPEG。
- 使用BitmapFactory解码图片,解码后将得到RGB的图像
- 使用Bitmap的compress()方法,来进行图片的压缩
- 其中quality代表图片质量参数,范围为1-100,数值越高图片清晰度越高,图片size越大,建议为95。
参考实现代码:
获取新生成的图片进行接下来的操作处理。
参考实现代码:
测试了
HEIF
转JPEG
效率,在Android P pixel XL
上用bitmapfactory
的方式试了下,resolution 1440x960 quality 95
, 耗时在200ms左右,不同的机型CPU
等效果是不一样的这个后边再次统计下,现在市面上Android P
的手机太少,目前看来还是比较快的。2.图片扫描推荐方式
方式一(推荐):
通过
ContentProvider
扫描,实现本地图片的上传、分享或者是发送功能,需要扫描手机本地的图片。如果应用通过自身扫描的方式,需根据手机版本判断手机支持的图片编解码格式,所以推荐使用
ContentProvider
扫描手机中的图片。通过这种方法扫描,系统会将支持的所有解码格式的图片文件返回给应用,不需要应用自身再去做格式判断。参考实现代码:
方式二(不推荐):应用自身进行扫描。
应用通过自身扫描,判断哪些是可支持的图片文件,需要增加对
HEIF
格式的判断, HEIF 格式文件的后缀有两种:.heif
和.heic
五. 前景
并不是每一部手机都将支持这个功能。不支持的原因是硬件配置与专利许可的限制。要使用该技术,手机厂商需要要先支付一大笔专利费用。 这两个问题对苹果来说都不难解决。但是安卓手机来自不同的厂商,搭载了不同规格的硬件。因此,HEIF图片格式难以安装到安卓手机上。
一位业内人士提到了一个重要原因:
HEIF
图片需要借高效视频编码HEVC
来实现。因此,手机处理器需要支持HEVC
技术,才能处理HEIF图片。目前,支持HEVC
技术的处理器有高通的新旗舰骁龙845,以及810、820、835等。联发科的高端产品Helio X系列处理器大部分也支持HEVC
,但Helio X10和较低端的Helio P系列处理器则不支持。三星的Exynos 7和Exynos 9系列处理器均支持HEVC
。六. 心得体会
HEIF
图片格式的诸多优势使它具有很好的市场前景,这次谷歌Android P
本对此格式的支持也充分说明了这一点,建议各位广大开发者赶紧适配。参考:
华为技术文档
引用:
https://blog.csdn.net/lin20044140410/article/details/88577790
94d7-87af49a57e76.png)
也许你还想看
(▼点击文章标题或封面查看)
Android自定义ViewGroup的那些事儿
2021-10-14
SwiftUI的NavigationView的基础讲解与进阶实践
2021-11-25
KVO原理分析介绍
2021-11-18
iOS下的闭包上篇-Block
2021-11-04
Flutter之美
2021-10-28
最新评论
推荐文章
作者最新文章
你可能感兴趣的文章
Copyright Disclaimer: The copyright of contents (including texts, images, videos and audios) posted above belong to the User who shared or the third-party website which the User shared from. If you found your copyright have been infringed, please send a DMCA takedown notice to [email protected]. For more detail of the source, please click on the button "Read Original Post" below. For other communications, please send to [email protected].
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。