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官网:
- 如何处理HEIF图片:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/heif-adapter-faq
- Image Kit开发指南:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/image-kit
- Image Kit API参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/image-api
HEIF:更高质量、更小体积,开启 HarmonyOS 图像新体验的更多相关文章
- 移动Web—CSS为Retina屏幕替换更高质量的图片
来源:互联网 作者:佚名 时间:12-24 10:37:45 [大 中 小] 点评:Retian似乎是屏幕显示的一种趋势,这也是Web设计师面对的一个新挑战;移动应用程序的设计师们已经学会了如何为Re ...
- AliIAC 智能音频编解码器:在有限带宽条件下带来更高质量的音频通话体验
随着信息技术的发展,人们对实时通信的需求不断增加,并逐渐成为工作生活中不可或缺的一部分.每年海量的音视频通话分钟数对互联网基础设施提出了巨大的挑战.尽管目前全球的互联网用户绝大多数均处于良好的网络状况 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->WinForm版本新增新的角色授权管理界面效率更高、更规范
角色授权管理模块主要是对角色的相应权限进行集中设置.在角色权限管理模块中,管理员可以添加或移除指定角色所包含的用户.可以分配或授予指定角色的模块(菜单)的访问权限.可以收回或分配指定角色的操作(功能) ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本新增新的角色授权管理界面效率更高、更规范
角色授权管理模块主要是对角色的相应权限进行集中设置.在角色权限管理模块中,管理员可以添加或移除指定角色所包含的用户.可以分配或授予指定角色的模块(菜单)的访问权限.可以收回或分配指定角色的操作(功能) ...
- 使用firbug调试程序写更高质量的代码设置方法
在搜狐浏览器内输入about:config 在搜索栏中输入:strict 双击javascript.options.strict,将值变为true
- atitit.thumb生成高质量缩略图 php .net c++ java
atitit.java thumb生成高质量缩略图 php .net c++ 1. 图像缩放(image scaling)---平滑度(smoothness)和清晰度(sharpness) 1 2. ...
- 如何编写高质量的C#代码(一)
从"整洁代码"谈起 一千个读者,就有一千个哈姆雷特,代码质量也同样如此. 想必每一个对于代码有追求的开发者,对于"高质量"这个词,或多或少都有自己的一丝理解.当 ...
- 编写高质量代码改善C#程序的157个建议——建议30:使用LINQ取代集合中的比较器和迭代器
建议30:使用LINQ取代集合中的比较器和迭代器 LINQ提供了类似于SQL的语法来实现遍历.筛选与投影集合的功能. static void Main(string[] args) { List< ...
- MVC 基架不支持 Entity Framework 6 或更高版本 即 NuGet的几个小技巧
MVC 基架不支持 Entity Framework 6 或更高版本.有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=276833. 原因:mvc版 ...
- 编写高质量代码改善C#程序的157个建议——建议56:使用继承ISerializable接口更灵活地控制序列化过程
建议56:使用继承ISerializable接口更灵活地控制序列化过程 接口ISerializable的意义在于,如果特性Serializable,以及与其像配套的OnDeserializedAttr ...
随机推荐
- 用 Tarjan 算法求解无向图的割点和割边
上期回顾:https://www.cnblogs.com/ofnoname/p/18823922 Tarjan 算法与无向图 连接性分析是图论的核心,而Tarjan算法为我们提供了穿透复杂网络结构的通 ...
- ChatGPT学习之旅 (3) Prompt进阶用法
大家好,我是Edison. 上一篇:Hello Prompt 复习Prompt用法 还记得上一篇学到的黄金公式吗? 这里,我们先来复习一下,假如我们想要ChatGPT来扮演一个[私人营养师]为我们给出 ...
- CTC蜀道会:第一次线下分享活动圆满结束
近期,成都.NET俱乐部核心成员经过讨论会,我们成立了CTC蜀道会,它是一个专注于创业历程.研发管理.AIGC.副业之路..NET.Vue.微软技术.开源技术等领域的社区,立足于蓉城成都,致力于连接同 ...
- idea部分操作(一)----持续更新
07:51:101.IDEA正确设置编码统一为UTF-8: 这样可以整体修改.
- Luogu P11160 【MX-X6-T6】機械生命体 题解
P11160 [MX-X6-T6]機械生命体 注意到 \(\text{lowbit}\) 是从最低位开始的,所以我们把数字按照二进制位从低位往高位插进字典树. 插入和删除操作是平凡的.查最大 \(\t ...
- 论文中关于要使用600线的python代码
简介 论文中通常要使用600dpi的图片, 如果一个一个用PS来进行修改实在是费力不讨好. 使用python一套带走 code import os from PIL import Image impo ...
- Intuitive Vs Conceptive : Set/Number/Measure Theory + Real Analysis: Lebesgue Measure and Integration
Lebesgue's post-doctory thesis: Measure, length and area; Joseph Louis Bertrand's three different va ...
- Linux 受到开发者偏爱的 9 个理由!-九五小庞
Linux 在 GNU 通用公共许可证(GPL)的推动下开发和发布,是一个可以免费使用的开源操作系统.使用者只要遵守许可条款,就可以运行.研究.编辑和重新发布源代码. 我们日常所使用的大多数设备运行的 ...
- Win10专业版系统电脑关机太慢的问题
有电脑基地的小伙伴说自己电脑安装了win10专业版系统,只是开机不慢,就是关机要等半天,实在太难受了.那么,技术员小编就针对电脑关机慢的问题来分享详细解决方法. Win10 专业版系统电脑关机太慢,可 ...
- Unity 精准伤害检测
using System;using UnityEngine;public class TestGameAnimEevnt : MonoBehaviour { [Range(0,1)] public ...