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官网:

  1. 如何处理HEIF图片:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/heif-adapter-faq
  2. Image Kit开发指南:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/image-kit
  3. Image Kit API参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/image-api
相关推荐
self_myth6 小时前
[特殊字符] 深入理解操作系统核心特性:从并发到分布式,从单核到多核的全面解析
windows·macos·wpf·harmonyos
安卓开发者14 小时前
鸿蒙NEXT主题设置指南:应用级与页面级主题定制详解
华为·harmonyos
深盾科技20 小时前
鸿蒙ABC开发中的名称混淆与反射处理策略:安全与效率的平衡
安全·华为·harmonyos
2501_9197490321 小时前
鸿蒙:获取UIContext实例的方法
华为·harmonyos
王佳斌1 天前
tp报错解决
harmonyos
coooliang1 天前
【鸿蒙 NEXT】V1迁移V2状态管理
java·前端·harmonyos
江拥羡橙1 天前
【目录-单选】鸿蒙HarmonyOS开发者基础
前端·ui·华为·typescript·harmonyos
爱笑的眼睛111 天前
HarmonyOS应用开发:深入ArkUI声明式开发范式与最佳实践
华为·harmonyos
云水木石1 天前
开源鸿蒙+龙芯CPU,能擦出怎样的火花?
华为·开源·harmonyos